Double compte sur 2 tables en 1 requete [résolu] [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 27-03-2019 à 22:26:16
Et avec ça ?
SELECT t.NB AS NBINSCRITS, COUNT(t.id) AS NBCOURS FROM
(SELECT c.id, count(i.id) AS NB FROM Cours c LEFT JOIN Inscrits i ON (c.id = i.id_cours) GROUP BY c.id) AS t
GROUP BY t.NB
ORDER BY t.NB DESC
Marsh Posté le 28-03-2019 à 09:45:21
Bonjour,
Merci pour la réponse rapide et surtout pour la requête.
J'étais à des km de cette écriture.
Cela donne les résultats voulus.
Maintenant, je vais regarder de plus près comment elle fonctionne.
Amicalement,
AR94
Marsh Posté le 28-03-2019 à 10:33:40
Ben en gros, pour chaque cours, on compte le nb d'inscrits : c'est ce que fait la sous-requête dans le FROM. Le LEFT JOIN permet d'avoir les cours pour lesquels t'as 0 inscrits. Si tu ne veux pas des 0, tu remplaces le LEFT JOIN par un INNER JOIN.
La requête principale exploite la sous-requête et compte le nb de cours qui ont le même nb d'inscrits puis on ordonne le résultat par taille décroissante du nb d'inscrits.
Edit : ta requête risquait pas de marcher car à aucun moment tu indiques comment tu veux faire ton regroupement (tes 2 count). Si tu utilises des fonctions d'agrégation (count, sum, min, max, avg...) tu dois forcément utiliser le GROUP BY pour indiquer comment tu veux agréger les données
Marsh Posté le 27-03-2019 à 16:35:51
Bonjour,
J'ai 2 tables:
Cours : avec les champs id,nom, niveau etc...
Inscrits: avec les champs id, id_cours, rôle...
Je voudrai le nombre de cours ayant un certain nombre d'inscrits, trier par nombre d'inscrits
Exemple :
Cours.id (1,2,3,4,5,6,7,8,9)
Inscrits.id_cours(1,1,1,2,2,2,3,3,4,4,5,5,6,6,7,8,9)
3 inscrits au cours 1, 3 inscrits au cours 2, 2 inscrits au cours 3 etc...
soit : 2 cours avec 3 inscrits, 3 cours avec 2 inscrits et 3 cours avec 1 inscrit
je voudrai obtenir :
NB cours NB inscrits
2 3
3 2
3 1
Quand j'écris :
SELECT count(co.id) as nb_cours, count(inscr.id) as Nb_inscrits
FROM cours as co
OUTER JOIN inscrits AS inscr
ON co.id = incr.contextid
bein, cela ne marche pas... sinon, je ne poserai pas la question...
Auriez-vous une idée ?
Amicalement,
AR94
Message édité par ar94 le 28-03-2019 à 09:54:30