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

Langage SQL Discussion :

[SQL] deux count dans une requette


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut [SQL] deux count dans une requette
    tout d'abord bonjour
    Voici la partie de la base de donnée qui nous intéresse (sgbd: MySQL):



    Remarquez que article référence produit et stock référence lui aussi produit.

    J'aimerais pouvoir récupérer pour une ordonnance, l'id des produits, la quantité DEMANDE pour chaque produit, la quantité DISPONIBLE pour chaque produit (=quantité totale en stock - stock_promis)...
    Le but est donc de réunir pour chaque produits le nombre de références de la table article ainsi que le nombre de référence de la table stock.

    Mon problème c'est que lorsque je fait un COUNT + GROUP BY je peut avoir soit la quantité disponible, soit la quantité demandée.
    En espérant que quelqu'un puisse m'aider...

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Pour ma part, je n'ai jamais vu de requêtes avec 2 counts à moins de faire une union mais je ne pense pas que ce soit ce que tu veux. Le count étant lié au group by je ne vois pas comment tu pourrais faire :s

    Je n'ai pas vu les attributs de quantite totale, ...

    Peux-tu poster ta requête actuelle ? (Ca pourrait m'aider )

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Bonjour,

    Le plus simple est d'utiliser des sous-requêtes (fonctionnailité disponible depuis la 4.1)

    Une sous-requête ramenant le nombre de références de la table article, l'autre ramenant le nombre de référence de la table stock.
    Le select principal travaille sur ces sous-requêtes au lei de travailler directement sur les tables.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Coldyo:
    si tu veut ma requête serais du genre

    SELECT idproduit, count(s.idproduit) as qte_demande, (count(a.idproduit) - stock_dispo) as qte_dispo
    FROM ((article a NATURAL JOIN produit p) NATURAL JOIN stock s
    GROUP BY idproduit;

    Mais c'est faux et cela ne marche pas. Après créer un autre champs dans la table produit ne m'enchante guère. Pour moi la quantité totale représente le nombre de d'entrée dans la table stock qui référence un produit. Donc la quantité disponible est égale a cette quantité total moins la valeur du champs stock_promis.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    billharry:
    je vais creusé du coté des sous-requêtes et je vous tient au courant.
    J'avais tenté sans succès, au passage si tu a des exemples a me donner je suis preneur!!

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Voici la doc correspondante :
    http://dev.mysql.com/doc/refman/5.0/...med-views.html

    Peux-tu me donner les requêtes correpondant à :
    1) récupérer pour une ordonnance, l'id des produits, la quantité DEMANDE pour chaque produit
    2) récupérer la quantité DISPONIBLE pour chaque produit (=quantité totale en stock - stock_promis) (je ne vois pas bien le calcul à faire)

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    J'ai posté une solution à essayer qui ressemble à ton problème dans cette autre discussion.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    billharry:
    d'après ce que j'ai pu comprendre sur les sous-requêtes, elle s'utilise avec la clause WHERE, donc en d'autre terme (arrête mois si je me trompe) elle permettent d'affiner le résultat d'une requêtes avec le résultat d'une autre requête... Si tel est le cas, cela ne m'avance guère.

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    En fait la clause where te permet de faire la jointure entre tes sous-requêtes

    Pour toi :

    select colonnes
    from (requête A) AS A, (requête B) AS B
    where A.produitid=B.produitid

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    CinePhil:
    J'ai compris le problème et la solution du lien. Mais je ne vois pas comment l'appliquer a mon cas.
    Et puis dans le cas que tu m'a montrée on a une architecture "en arbre" j'ai envie de dire. Je m'explique: on a une activité qui possède un véhicule qui possède a son tour un transport.
    Ici on a un article qui référence un produit et un stock qui référence un produit... c'est bien la tous le problème

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    billharry
    Hoo je vois .... en effet a première vue cela me semble intéressant. Moi j'avais vue sa
    http://dev.mysql.com/doc/refman/5.0/...ubqueries.html

    Maintenant est-ce que ta méthode est compatible avec mysql .... tel est la question .
    Je vais faire des test et je vous tient au courant!

    Edit:
    En faite sa revient au même que ce que j'ai dit plus haut, seulement apparament MySQL a une façon bien a lui de gérer les sous-requêtes.. a suivre.

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par lothar83fr Voir le message
    Maintenant est-ce que ta méthode est compatible avec mysql .... tel est la question .
    Je vais faire des test et je vous tient au courant!
    C'est compatible depuis la 4.1

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    billharry:
    Ce qui est après le FROM n'est pas affiché? Ou sinon j'ai rien compris au SELECT.

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par lothar83fr Voir le message
    Ce qui est après le FROM n'est pas affiché? Ou sinon j'ai rien compris au SELECT.
    N'est affiché, que ce que tu mets dans le select principal.
    Chaque sous requête doit retourner le produitid et les colonnes à afficher

    par ex:

    selec A.Aid, A.A1, B.B1, B.B2
    from (select Aid, A1, A2 from table1 where ...) AS A,
    (select Bid, B1, B2 from table2 where ...) AS B
    where A.Aid=B.Bid

  15. #15
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Dis-moi comment calculer la quantité disponible pour un produit et je t'aide sur la requête à mettre en place.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    billharry:
    ce qui me faut, c'est en une requête pour afficher: l'id d'un produit, le nombre de fois où il est référencé par un article et le nombre de fois où il est référencé par un stock.

  17. #17
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par lothar83fr Voir le message
    id d'un produit, le nombre de fois où il est référencé par un article
    Je ne vois pas la liaison en produit et article.
    Dans les tables, je ne vois que des liaisons en produit et stock, et article et stock, alors que ce n'est pas ce que montre le modèle. Tu peux me dire comment se fait la clé étrangère?

    Citation Envoyé par lothar83fr Voir le message
    id d'un produit, le nombre de fois où il est référencé par un stock
    select idproduit, count(*) AS StockRef from stock group by idproduit

    Suite à ta réponse je finalise

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    une erreur c'est glissé sur la représentation de ma table. Dans la table article c'est idproduit et non idstock ... dsl j'ai pris une ancienne image. je corrige.

  19. #19
    Membre habitué
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par lothar83fr Voir le message
    une erreur c'est glissé sur la représentation de ma table. Dans la table article c'est idproduit et non idstock ... dsl j'ai pris une ancienne image. je corrige.
    Je comprends mieux
    Donc voici le résultat final

    Citation Envoyé par lothar83fr Voir le message
    id d'un produit, le nombre de fois où il est référencé par un article
    select idproduit, count(*) AS ArticleRef from article group by idproduit

    Citation Envoyé par lothar83fr Voir le message
    id d'un produit, le nombre de fois où il est référencé par un stock
    select idproduit, count(*) AS StockRef from stock group by idproduit


    Requête finale :
    select A.idproduit, ArticleRef, StockRef
    from (select idproduit, count(*) AS ArticleRef from article group by idproduit) as A, (select idproduit, count(*) AS StockRef from stock group by idproduit) as B
    where A.idproduit=B.idproduit

    CQFD

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    :o :o :o :o :o
    ENFIN!!!
    Effectivement c'est Ce Qu'il Fallait Démontrer .
    Tu m'a appris un bon truc la.
    Merci! Affaire résolue

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

Discussions similaires

  1. Deux COUNT dans une seule requête
    Par aya02 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/07/2010, 10h17
  2. [Oracle] Deux COUNT dans une seule requête
    Par EvilJajuka dans le forum Débuter
    Réponses: 5
    Dernier message: 30/09/2009, 11h00
  3. [MySQL] Deux COUNT dans une requête
    Par ecchymose dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/07/2007, 23h24
  4. [SQL2K] Deux count dans une même requete
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/02/2007, 17h12
  5. [Requete] Deux count dans une requete
    Par wperezrobles dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/10/2006, 09h17

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