Group by et max. [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 18-10-2002 à 14:55:54
je vois pas trop ce que tu veux faire
deja max et count ensemble c'est pas trop logique
Marsh Posté le 18-10-2002 à 14:57:17
Sebastien a écrit a écrit : C'est interdit de faire ca ? mysql> select max(count(initial)) -> from users -> group by initial; ERROR 1111: Invalid use of group function |
Bah vi, ça peut pas marcher ton truc ... Tu lui demande de faire un count sur un champ en regroupant par ce champs, c'est abusrde.
Tu veux faire quoi exactement ?
Marsh Posté le 18-10-2002 à 14:58:07
Manifestement il veut pas, ce qui est logique.
essaie ca :
select count(initial) as total
from users
group by initial
order by total DESC
limit 0,1;
Marsh Posté le 18-10-2002 à 15:01:10
mrbebert a écrit a écrit : Manifestement il veut pas, ce qui est logique. essaie ca : select count(initial) as total from users group by initial order by total DESC limit 0,1; |
Mais c'est completement absurde comme requete !
select count(qqchose) from truc group by qqchose va te renvoyer autant de 1 que tu as de ligne dans la table et c'est tout !
Ca m'etonnerai que ce soit ça qu'il veut ...
Marsh Posté le 18-10-2002 à 15:02:41
Je veux simplement savoir kel est la redondance maximum des initiales
Marsh Posté le 18-10-2002 à 15:04:15
tomlameche a écrit a écrit : Mais c'est completement absurde comme requete ! select count(qqchose) from truc group by qqchose va te renvoyer autant de 1 que tu as de ligne dans la table et c'est tout ! Ca m'etonnerai que ce soit ça qu'il veut ... |
count(qqchose), ca te renvoie le nombre de qqchose qui ne sont pas à NULL (ici, ca revient au nombre de lignes)
Ce que tu indiques, ce serait count(distinct qqchose)
Si tu as 3 lignes ou qqchose est identique, elles seront groupées, et le count(qqchose) indiquera 3
Marsh Posté le 18-10-2002 à 15:06:28
Sebastien a écrit a écrit : Je veux simplement savoir kel est la redondance maximum des initiales |
bah par exemple tu pourrai faire
select initial, count(*)
from user
group by initial
order by count(*) desc
et récupéré la première ligne.
Marsh Posté le 18-10-2002 à 15:07:44
mrbebert a écrit a écrit : count(qqchose), ca te renvoie le nombre de qqchose qui ne sont pas à NULL (ici, ca revient au nombre de lignes) Ce que tu indiques, ce serait count(distinct qqchose) Si tu as 3 lignes ou qqchose est identique, elles seront groupées, et le count(qqchose) indiquera 3 |
D'accord avec toi dans le principe, mais ici tu regroupe par la même chose que ce que tu comptes ...
Scuze, en fait t'as raison.
Marsh Posté le 18-10-2002 à 15:10:11
Oui et non :-)
Oui en elle meme la requete comme ca peut se faire mais non car au finale c la partie d une requete imbriquée sous oracle.
Ma requete de depart fonctionne sous oracle mais pas sous mysql ce qu il me semble bizarre.
Et en oracle le LIMIT n hesiste pas
Marsh Posté le 18-10-2002 à 15:11:15
Sebastien a écrit a écrit : Oui et non :-) Oui en elle meme la requete comme ca peut se faire mais non car au finale c la partie d une requete imbriquée sous oracle. Ma requete de depart fonctionne sous oracle mais pas sous mysql ce qu il me semble bizarre. Et en oracle le LIMIT n hesiste pas |
Sous Oracle tu peux utiliser rownum.
Marsh Posté le 18-10-2002 à 15:12:33
tomlameche a écrit a écrit : D'accord avec toi dans le principe, mais ici tu regroupe par la même chose que ce que tu comptes ... |
Bon on va t expliquer :-)
Nom Prenom Initial
Dupont Toto dt
Dupont Tata dt
Henri Toto ht
Assis Toto at
select initial,count(initial)
from users
group by initial
:
dt | 2
ht | 1
at | 1
Maintenant je veux simplement que la requete me renvoie 2 :-)
Marsh Posté le 18-10-2002 à 15:12:56
tomlameche a écrit a écrit : Sous Oracle tu peux utiliser rownum. |
En fait c pour un ami on teste chaqu un de notre cote il me dit que ca a pas marché avec le numrow.
Marsh Posté le 18-10-2002 à 15:13:42
tomlameche a écrit a écrit : D'accord avec toi dans le principe, mais ici tu regroupe par la même chose que ce que tu comptes ... Scuze, en fait t'as raison. |
Et ???
Effectivement, un count(*) reviendrait peut être au même, mais c'est absolument pas faux de compter sur le même champ que pour regrouper.
Je dirais même que c'est logique
Marsh Posté le 18-10-2002 à 15:19:08
Bon la requete qu il fait fonctionne en fait, seulement elle plante quand ca renvoit aucune ligne alors qu il essaye par tous les moyens d en retourner forcement une
donc on lache cette histoire d oracle je veux juste savoir prk un max(count()) marche pas sous mysql ^^
Marsh Posté le 18-10-2002 à 15:20:40
Sebastien a écrit a écrit : Bon on va t expliquer :-) Nom Prenom Initial Dupont Toto dt Dupont Tata dt Henri Toto ht Assis Toto at select initial,count(initial) from users group by initial : dt | 2 ht | 1 at | 1 Maintenant je veux simplement que la requete me renvoie 2 :-) |
Faut bien relire les messages avznt de répondre !
J'ai déjà fait mon mea culpa ;-)
Marsh Posté le 18-10-2002 à 15:22:15
Sebastien a écrit a écrit : Bon la requete qu il fait fonctionne en fait, seulement elle plante quand ca renvoit aucune ligne alors qu il essaye par tous les moyens d en retourner forcement une donc on lache cette histoire d oracle je veux juste savoir prk un max(count()) marche pas sous mysql ^^ |
peut être parce que ta requète n'a aucun sens ?
Marsh Posté le 18-10-2002 à 15:23:09
--Message édité par tomlameche le 18-10-2002 à 15:11:53--
A ce moment la g t en train de poste ma reponse
Marsh Posté le 18-10-2002 à 15:23:55
joce a écrit a écrit : peut être parce que ta requète n'a aucun sens ? |
Et en quoi elle a aucun sens ?
Moi j ai appris a faire du sql pas à utiliser le SQL de tel ou tel sgbd.
Donc je ne veux pas utiliser le limit qui est propre a mysql sur une appli qui risque d etre transfere sur du oracle ou postgresql
Marsh Posté le 18-10-2002 à 15:24:24
Sebastien a écrit a écrit : Bon la requete qu il fait fonctionne en fait, seulement elle plante quand ca renvoit aucune ligne alors qu il essaye par tous les moyens d en retourner forcement une donc on lache cette histoire d oracle je veux juste savoir prk un max(count()) marche pas sous mysql ^^ |
Marrant ça. J'ai essayé la requete
select max(count()) sous Oracle, et effectivement ca marche ... Pourtant, à lire la requete, ca m'a parru vraiment absurde ...
on en apprend tous les jours.
Pour MySQL, désolé, je connais assez peu, je bosse que sous Oracle.
Marsh Posté le 19-10-2002 à 13:34:42
Sebastien a écrit a écrit : Et en quoi elle a aucun sens ? Moi j ai appris a faire du sql pas à utiliser le SQL de tel ou tel sgbd. Donc je ne veux pas utiliser le limit qui est propre a mysql sur une appli qui risque d etre transfere sur du oracle ou postgresql |
au temps pour moi, après relecture de la requète ca a un sens
Marsh Posté le 18-10-2002 à 14:53:01
C'est interdit de faire ca ?
mysql> select max(count(initial))
-> from users
-> group by initial;
ERROR 1111: Invalid use of group function