[MySQL] Group by et max.

Group by et max. [MySQL] - SQL/NoSQL - Programmation

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

Reply

Marsh Posté le 18-10-2002 à 14:53:01   

Reply

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ?

Reply

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;
 

Reply

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;
 
 




 :eek2:  
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 ...

Reply

Marsh Posté le 18-10-2002 à 15:02:41    

Je veux simplement savoir kel est la redondance maximum des initiales

Reply

Marsh Posté le 18-10-2002 à 15:04:15    

tomlameche a écrit a écrit :

 
 :eek2:  
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 ...



:non:  
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 :)


Message édité par mrbebert le 18-10-2002 à 15:05:10
Reply

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.

Reply

Marsh Posté le 18-10-2002 à 15:07:44    

mrbebert a écrit a écrit :

 :non:  
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.
 :jap:


Message édité par tomlameche le 18-10-2002 à 15:11:53
Reply

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

Reply

Marsh Posté le 18-10-2002 à 15:10:11   

Reply

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.

Reply

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

Reply

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.


Message édité par Sebastien le 18-10-2002 à 15:14:41
Reply

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.
 :jap:  



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

Reply

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 ^^

Reply

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 ;-)

Reply

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


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

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

Reply

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




 
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


Message édité par Sebastien le 18-10-2002 à 15:25:49
Reply

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.
 :jap:  
Pour MySQL, désolé, je connais assez peu, je bosse que sous Oracle.

Reply

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


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed