[SQL] Deux agrégations imbriqués !

Résolu
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   -  
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   -
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

Utilisateur anonyme
 
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 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
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
Utilisateur anonyme
 
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
 
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 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
ç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
 
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 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
C'est vrai, c'est con :D !!!
On m'a lancer sur une fausse piste !
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
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
 
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 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
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
 
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