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 :

Problème de requete, COUNT, GROUP BY etc.


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Points : 68
    Points
    68
    Par défaut Problème de requete, COUNT, GROUP BY etc.
    Hello

    Mettons que j'aie cette table achats :

    id_achat id_livre format
    --- 1 ----- 1 -- papier
    --- 2 ----- 1 -- carton
    --- 3 ----- 2 -- carton
    --- 4 ----- 2 -- carton
    --- 5 ----- 1 -- papier


    Je voudrais faire une requête qui me retourne, pour chaque id_livre, le nombre d'enregitrement pour lesquels format est "papier", et le nombre d'enregistrements pour lesquels format est "carton".
    Ce qui me donnerais :

    id_livre nb_papier nb_carton
    --- 1 ----- 2 ------- 1
    --- 2 ----- 0 ------- 2

    Je trouve rien du coté de GROUP BY, COUNT etc... Il me faudrait une sorte de "COUNT WHERE" mais ça n'existe pas

    Est-ce possible et si oui comment faire ?

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il s'agit d'une requête de type pivot (càd transformer certaines colonnes en lignes). J'ai codé la requête avec Oracle en utilisant une syntaxe SQL qui devrait aussi fonctionner avec MySQL 5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    >
    > select * from achats;
     
      ID_ACHAT   ID_LIVRE FORMAT
    ---------- ---------- ------
             1          1 papier
             2          1 carton
             3          2 carton
             4          2 carton
             5          1 papier
     
    >
    > select id_livre, sum(papier) "papier", sum(carton) "carton" from
      2  (
      3   select id_livre,
      4   case format when 'papier' then sum(cnt) else 0 end as papier,
      5   case format when 'carton' then sum(cnt) else 0 end as carton
      6   from (
      7     select id_livre, count(*) cnt, format
      8     from achats
      9     group by id_livre, format)
     10   group by id_livre, format)
     11  group by id_livre;
     
      ID_LIVRE     papier     carton
    ---------- ---------- ----------
             1          2          1
             2          0          2

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Points : 68
    Points
    68
    Par défaut


    A modifier pour mySQL en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT id_livre, sum(papier) AS papier, sum(carton) AS carton 
    FROM  (  
     SELECT id_livre,  
     CASE format WHEN 'papier' THEN sum(cnt) ELSE 0 END AS papier,  
     CASE format WHEN 'carton' THEN sum(cnt) ELSE 0 END AS carton  
     FROM (
      SELECT id_livre, count(*) AS cnt, format   FROM achats   
      GROUP BY id_livre, format
     ) AS t1  
     GROUP BY id_livre, format  
    ) AS t2 
    GROUP BY id_livre;
    Bon, maintenant faut l'intégrer à la vreaie requete ça va pas etre facile

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Points : 68
    Points
    68
    Par défaut
    Et mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          SELECT id_livre,  
          sum(CASE format WHEN 'papier' THEN 1 ELSE 0 END) AS papier,  
          sum(CASE format WHEN 'carton' THEN 1 ELSE 0 END) AS carton  
          FROM  achats  
          GROUP BY id_livre

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

Discussions similaires

  1. [MySQL-5.6] Problème de requête (COUNT, GROUP BY) sur plusieurs tables
    Par alexisavenel dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/10/2014, 12h47
  2. [MySQL] Problème avec requete count
    Par moudjahidine dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/08/2013, 16h09
  3. problème provider : requete count ne ramene rien
    Par LEPTMR dans le forum Oracle
    Réponses: 2
    Dernier message: 06/07/2007, 11h01
  4. problème de requete: COUNT() multiples
    Par nicolemans72 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/02/2007, 10h06
  5. Requete SQL : COUNT GROUP BY
    Par Florent08800 dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/10/2006, 10h04

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