A propos de GROUP BY

Fermé
alix - 1 mai 2018 à 13:28
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 1 mai 2018 à 14:49
Bonjour, je travaille sous python avec des requêtes sql. Ma table est student(studentid, nom, prenom, age, classe, lycee_origine, sexe). J'aimerais connaître le nombre de filles et de garçons par classe (en sachant qu'il y a trois classes différentes dans ma classe. J'ai donc écrit le code suivant :
"""SELECT classe, (SELECT COUNT(studentid) FROM student WHERE sexe='F' GROUP BY classe) AS 'nbfilles', (SELECT COUNT (studentid) FROM student WHERE sexe='M' GROUP BY classe) AS 'nbgarcons' FROM student GROUP BY classe"""
Mais mon programme me retourne trois fois les valeurs nombres de filles et de garcons de la première classe. Comment cela se fait-il ? comment résoudre ce problème ?
merci


2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
1 mai 2018 à 13:33
Bonjour,
Essaye ça :
SELECT classe,sexe,count(*) as NB 
FROM student 
GROUP BY classe,sexe

0
merci, effectivement cela me donne le nombre de filles et de garcons par classe sous cette forme :
[('MPSI1', 9), ('MPSI1', 8), ('MPSI2', 8), ('MPSI2', 4), ('PCSI', 7), ('PCSI', 4)]
en revanche j'aimerais avoir le résultat sous cette forme :
[('MPSI1', 9, 8), ('MPSI2', 8,4), ('PCSI', 7,4)]

aurais-tu un code à me proposer ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 1 mai 2018 à 14:49

SELECT T2.classe
  ,SUM(T2.F) as NBF 
  ,SUM(T2.M) as NBM
FROM (
 SELECT T.classe,IF(T.sexe="F",1,0) as F , IF(T.sexe="M",1,0) as M
 FROM student T
) T2
GROUP BY T2.classe



0