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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Double compte sur 2 tables en 1 requete [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Double compte sur 2 tables en 1 requete [résolu]

n°2330943
ar94
Posté le 27-03-2019 à 16:35:51  profilanswer
 

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
mood
Publicité
Posté le 27-03-2019 à 16:35:51  profilanswer
 

n°2330982
rufo
Pas me confondre avec Lycos!
Posté le 27-03-2019 à 22:26:16  profilanswer
 

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


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2330995
ar94
Posté le 28-03-2019 à 09:45:21  profilanswer
 

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

n°2331001
rufo
Pas me confondre avec Lycos!
Posté le 28-03-2019 à 10:33:40  profilanswer
 

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


Message édité par rufo le 28-03-2019 à 10:35:38

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

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

  [SQL] Double compte sur 2 tables en 1 requete [résolu]

 

Sujets relatifs
Problème requête GET serveurWeb/Microcontroleur[MySQL] Nombre de cours et exercices avec une seules requête
requete http pour récupérer ip[MySQL] Plusieurs tables ou une seule grosse dans ce cas?
Problème pour structurer le résultat d'une requete SQLBesoin d'aide pour une requête
[RÉSOLU] [SQL] simplifier 4 requetes en 1Compte rendu DareBoost, calcul performance de mon site web
Requete sur Sage edition pilotée 
Plus de sujets relatifs à : [SQL] Double compte sur 2 tables en 1 requete [résolu]


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