[SQL] Deux agrégations imbriqués !

Résolu/Fermé
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 23 mai 2012 à 22:05
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 25 mai 2012 à 16:33
Bonsoir, alors voila, j'ai demander a plusieurs personnes (sensés connaitre la réponse), mais aucune réponse claire de leur part !

Peut on ou pas imbriquer deux agrégations l'une dans l'autre, par exemple, MAX(COUNT(*)) !
Un professeur m'avait dit qu'il doit y avoir un GROUP BY blabla ... !
MySQL me dit qu'il y a une erreur !

Alors si la réponse est Oui !

Une table contient des prénoms, qui peuvent se répéter !
On veut connaitre le prénom qui se répète le plus souvent, comment on fait ?

PS : Sans utiliser ORDER BY et LIMIT !

Merci !




A voir également:

3 réponses

Bonjour

SELECT MAX(toto) FROM (SELECT prenom, count(prenom) AS toto FROM matable GROUP BY prenom) t1 

[edit] Pardon, c'est le prénom qui t'intéressait.
Avec mysql, SELECT prenom,MAX(toto)... marche
Mais je ne suis pas sûr que ça marche avec tous les SGBD car il peut y avoir plusieurs prénoms ex-aequo, et cette requête en rendra un seul. J'essaye autre chose et je reviens
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
24 mai 2012 à 16:31
Merci !

La requête fonctionne, et elle affiche bel et bien le nombre max d'occurrence d'un prénom !
sauf que le prénom sélectionné ne correspond pas !
0
Effectivement, ça ne marche pas, je me suis un peu trop précipité quand je me suis rendu compte qu'il manquait le prénom dans ma 1ère requête.
Par contre, je viens de ré-essayer ma proposition de 9h13, elle semble bien marcher, elle (sauf que j'avais écrit matble au lieu de matable)
0
Utilisateur anonyme
24 mai 2012 à 09:13
SELECT prenom,COUNT(prenom)cprenom, pmax FROM matable,(SELECT MAX(toto) pmax FROM (SELECT prenom , COUNT(prenom) toto FROM matble GROUP BY prenom) t1) t2  GROUP BY prenom HAVING cprenom=pmax


Je ne suis pas un pro de SQL, il y a sans doute plus léger.

L'idée est de :
1 - rechercher le nombre d'occurrences (toto) de chaque prénom - select d'alias t1
2 - de rechercher le max de toto -> pmax, la fréquence du (des) prénom(s) le(s) plus utilisé(s) - select d'alias t2
3 - de recréer le même select qu'au point 1 en ajoutant une colonne qui contient cmax (c'est là que c'est lourd)
4 - de ne garder que les lignes dont la fréquence est cmax ( 'HAVING' )
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
24 mai 2012 à 16:50
ça fonctionne trés bien o.O !

Même si l'affichage est un peut Chelou :p, mais sympa quand même !

J'ai essaye ceci, le résultat est correct, mais pour la logique, je ne sais pas !!!
SELECT prenom
FROM tables
HAVING COUNT(*) >= (SELECT COUNT(*) FROM table)
0
Utilisateur anonyme
25 mai 2012 à 00:58
Euh...
Ta requête ne marche pas. Chez moi elle sort simplement le premier prénom de la table.
D'ailleurs, un COUNT(*) sans GROUP BY prenom n'a aucune raison de compter les prénoms identiques. Il compte le nombre total de lignes de ta table, c'est tout. Il ne devine pas tout seul si tu comptes les prénoms, les noms ou n'importe quel autre champ de la table.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
25 mai 2012 à 01:03
C'est vrai, c'est con :D !!!
On m'a lancer sur une fausse piste !
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/05/2012 à 01:12
Merci en tout cas pour les éclaircissements !

Sauf que personne ne m'a encore confirmer si on pouvait imbriquer des agrégations :D !!
0
Utilisateur anonyme
25 mai 2012 à 01:12
On m'a lancer sur une fausse piste !
Quel est le On qui a osé te faire ça ?
Mais avoue que tu es un peu On aussi de ne pas avoir vérifié ^^
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
25 mai 2012 à 01:16
Ben justement, j'ai cru que c'était correct vu que le prenom qui s'est affiché était effectivement le prénom le plus répété !!! lol
Donc j'ai pas trop insister la dessus vu que c'est un professeur qui m'a lancer la dessus, maintenant si j'ai louper un GROUP BY qu'il avait (peut être) mentionner, je sais pas !!! :D
0
Utilisateur anonyme
25 mai 2012 à 08:46
j'ai cru que c'était correct vu que le prenom qui s'est affiché était effectivement le prénom le plus répété
Et tu tires des conclusions définitives sur un truc que tu ne comprends pas, à partir d'un seul essai ?
C'est une très mauvaise façon d'être rapide, tu peux être sûr de perdre 10 fois plus de temps plus tard parce que tu ne remettras pas en cause un bout de code qui, en fait, est mauvais.
0