Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1791 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1563389
theredled
● REC
Posté le 22-05-2007 à 12:25:11  profilanswer
 

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 :D

 

Est-ce possible et si oui comment faire [:opus dei]


Message édité par theredled le 22-05-2007 à 12:29:25

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
mood
Publicité
Posté le 22-05-2007 à 12:25:11  profilanswer
 

n°1563434
cgo2
Dum spiro spero
Posté le 22-05-2007 à 13:55:15  profilanswer
 

Oui c'est possible avec des requetes imbriquées, mais je pense que ça sera complètement pourri en terme de performances.
 
Un truc du genre :
 


select id_livre,
(
  select count(id_achat)
  from achats
  where id_livre = a.id_livre
  and format = "papier"
) as nb_papier,
(
  select count(id_achat)
  from achats
  where id_livre = a.id_livre
  and format = "carton"
) as nb_carton
from achats a
group by a.id_livre;



---------------
When it's from Finland it's good.  - Mon blog
n°1563441
Fr3d69
Posté le 22-05-2007 à 14:07:21  profilanswer
 

sinon tu peux voir du cote de count()...group by...having...
 
select count(maColonne), mesColonnes
from maTable
where mesCondition
group by mesColonnes
having mesConditions

n°1563462
theredled
● REC
Posté le 22-05-2007 à 14:39:30  profilanswer
 

J'ai eu une solution dans un autre forum, à savoir

 


Code :
  1. SELECT id_livre, sum(papier) AS papier, sum(carton) AS carton
  2. FROM  ( 
  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(*) AS cnt, format   FROM achats 
  8.   GROUP BY id_livre, format
  9. ) AS t1 
  10. GROUP BY id_livre, format 
  11. ) AS t2
  12. GROUP BY id_livre;
 

mais la solution de cgo2 n'est pas mal non plus.


Message édité par theredled le 22-05-2007 à 14:40:11

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1563466
theredled
● REC
Posté le 22-05-2007 à 14:41:17  profilanswer
 

cgo2 a écrit :

Oui c'est possible avec des requetes imbriquées, mais je pense que ça sera complètement pourri en terme de performances.


Pas trop le choix...


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1563475
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-05-2007 à 14:51:33  profilanswer
 

la même sans requete imbriqués:

Code :
  1. SELECT id_livre, 
  2. sum(CASE format WHEN 'papier' THEN 1 ELSE 0 END) AS papier, 
  3. sum(CASE format WHEN 'carton' THEN 1 ELSE 0 END) AS carton 
  4. FROM  achats 
  5. GROUP BY id_livre

Message cité 2 fois
Message édité par anapajari le 22-05-2007 à 14:51:58
n°1563482
theredled
● REC
Posté le 22-05-2007 à 14:55:20  profilanswer
 

anapajari a écrit :

la même sans requete imbriqués:

Code :
  1. SELECT id_livre, 
  2. sum(CASE format WHEN 'papier' THEN 1 ELSE 0 END) AS papier, 
  3. sum(CASE format WHEN 'carton' THEN 1 ELSE 0 END) AS carton 
  4. FROM  achats 
  5. GROUP BY id_livre



C'est proprement génial :o


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1563485
theredled
● REC
Posté le 22-05-2007 à 14:59:49  profilanswer
 

Ca m'amène à une question sur la façon dont MySQL fait les SUM et COUNT etc.
 
Est-ce qu'il fait le groupage avant ou après le matage des champs ?
 
 
J'ai plein d'autre champ à trouver, du style la somme des [prix des livres divisé par un pourcentage différent pour chaque achat], j'aimerais bien comprendre comment ça marche et ce qu'il est possible ou pas de faire...


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1563494
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-05-2007 à 15:12:52  profilanswer
 
n°1563612
cgo2
Dum spiro spero
Posté le 22-05-2007 à 16:54:55  profilanswer
 

anapajari a écrit :

la même sans requete imbriqués:

Code :
  1. SELECT id_livre, 
  2. sum(CASE format WHEN 'papier' THEN 1 ELSE 0 END) AS papier, 
  3. sum(CASE format WHEN 'carton' THEN 1 ELSE 0 END) AS carton 
  4. FROM  achats 
  5. GROUP BY id_livre



 
 :love:


---------------
When it's from Finland it's good.  - Mon blog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
[Access 2000 et SQL] Count, Group by et Sort => le sort ne marche pasProblème de type ambigu dans global.asax...
[ Resolu] Problème de lien ![vba] problème Replace / concaténation
Help problème debogage avec mon jeu vbaSavoir si la requête retourne un résultat ? (Résolu)
Probleme NI PCI 6024E et Borland C++ Builder 6probleme de librairie mime::lite:html
problème avec TobjectListe 
Plus de sujets relatifs à : Problème de requete, COUNT, GROUP BY etc.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR