IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Compter les elements identiques


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut Compter les elements identiques
    Bonjour a tous et d'avance sorry de la question bête que je m’apprête a poser.

    Voila j'ai 3 tables (concernés la ^^) : produits, vente et concerne.
    Produits contient le libelle produit, son id, son prix
    ente contient la date de vente, l'id vente, id client etc
    concerne contient 2 clés étrangères (de la vente et du produit) ainsi que la quantité vendus.

    Voici mon soucis: j'aimerais compter, pour une periode donnée le nombre de chaque type de produit.

    J'ai commencé avec cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T1.ID_PRODUIT, T1.QUANTITE, T2.LIBELLE_PRODUIT FROM `concerne` AS T1, `produit` AS T2, `vente` AS T3 WHERE T3.ID_VENTE=T1.ID_VENTE AND T1.ID_PRODUIT=T2.ID_PRODUIT AND T3.DATE_VENTE>='1/1/2013' AND T3.DATE_VENTE<='9/2/2013'
    Mais ça me sort ceci:

    ID_PRODUIT QUANTITE LIBELLE_PRODUIT
    4 25 chouquettes
    14 8 beignet aux pommes
    1 2 gateau cerise
    3 17 tarte citron meringue
    14 12 beignet aux pommes
    20 1 tarte rubarbe
    23 3 cassoulet

    Ici par exemple 2 lignes avec beignets au pommes.

    Quelqu’un pourrait il m'expliquer comment réunir les lignes qui ont un id produit identique?

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    simple un group by sur id_produit:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.ID_PRODUIT, sum(T1.QUANTITE), T2.LIBELLE_PRODUIT
    FROM `concerne` AS T1, `produit` AS T2, `vente` AS T3
    WHERE T3.ID_VENTE=T1.ID_VENTE AND T1.ID_PRODUIT=T2.ID_PRODUIT AND T3.DATE_VENTE>='1/1/2013' AND T3.DATE_VENTE<='9/2/2013'
    group by T1.ID_PRODUIT, T2.LIBELLE_PRODUIT

    tu dois mettre les colonnes dans le group by qui ne sont pas dans la fonction de groupage (ici sum pour sommer)
    de même, ton écriture des jointures date d'il y a 20 ans de nos jour on utilise systématiquement l'opérateur join avec (mieux) le type de jointure...

    ce qui devrait donner un truc du genre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.ID_PRODUIT, sum(T1.QUANTITE), T2.LIBELLE_PRODUIT
    FROM `concerne` AS T1
    inner join `produit` AS T2 on T1.ID_PRODUIT=T2.ID_PRODUIT
    inner join `vente` AS T3 on T3.ID_VENTE=T1.ID_VENTE AND T3.DATE_VENTE>='1/1/2013' AND T3.DATE_VENTE<='9/2/2013'
    group by T1.ID_PRODUIT, T2.LIBELLE_PRODUIT

    ici tu pourrais te passer d'ID_PRODUIT vu que tu as LIBELLE_PRODUIT:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT sum(T1.QUANTITE), T2.LIBELLE_PRODUIT
    FROM `concerne` AS T1
    inner join `produit` AS T2 on T1.ID_PRODUIT=T2.ID_PRODUIT
    inner join `vente` AS T3 on T3.ID_VENTE=T1.ID_VENTE AND T3.DATE_VENTE>='1/1/2013' AND T3.DATE_VENTE<='9/2/2013'
    group by T2.LIBELLE_PRODUIT
    plus efficace et compact mais ça dépend si tu te sert ou non d'ID_PRODUIT dans ton code appelant

  3. #3
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    GÉNIAL

    Exactement ce qu'il me fallait!

    Merci pour tes explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [excel] compter les elements de la ligne
    Par CIBOOX dans le forum Excel
    Réponses: 4
    Dernier message: 07/02/2007, 11h24
  2. Comment compter les champs identiques
    Par domik dans le forum Access
    Réponses: 6
    Dernier message: 28/01/2007, 20h26
  3. compter les éléments sélectionné dans un tag select
    Par lemmings dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2006, 14h07
  4. comment compter les entrées identiques dans une requete?
    Par Chico_Latino dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 18h16
  5. compter les elements d'un repertoire
    Par amadoulamine1 dans le forum Langage
    Réponses: 7
    Dernier message: 15/02/2006, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo