[MySQL] choisir la ligne retournée par GROUP BY

choisir la ligne retournée par GROUP BY [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 05-11-2010 à 15:53:42    

Bonjour,
 
il a t'il une possibilité de choisir la ligne retourné par un group by ?  
je m'explique, GROUP BY me retourne une ligne par valeur distincte, est-il possible de choisir la ligne en fonction d'une autre valeur de cette ligne ou le GROUP BY retourne toujours la première ligne rencontrée dans la table ?
 
ex :
 
id | px | code | des | revendeur
1 | 33  | 220 | 220u | AA
2 | 32  | 220 | 220u | BB
3 | 30  | 220 | 220y | AA
4 | 33  | 220 | 220u | CC
 
SELECT * FROM table WHERE code=220 GROUP BY revendeur  
ça me retourne les lignes 1,2 et 4
a la place de la ligne 1 je voudrai la 3 (celle ou 'px' est le plus petit)

Message cité 1 fois
Message édité par hutarios le 05-11-2010 à 15:58:09
Reply

Marsh Posté le 05-11-2010 à 15:53:42   

Reply

Marsh Posté le 05-11-2010 à 16:12:13    

Pas à ma connaissance, faut faire une sous-requête avant la requête qui fait le group by.


Message édité par rufo le 05-11-2010 à 16:12:41

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

Marsh Posté le 06-11-2010 à 14:54:19    

Tu ajoutes un "Order by px" et la première ligne retournée sera celle avec le plus petit px  :o


---------------
Homme, tu n'es que poussière. Thon, tu n'es que miettes.
Reply

Marsh Posté le 07-11-2010 à 00:03:47    

Je pense que le monsieur veut pouvoir choisir la ligne retournée pour chaque regroupement effectué par group by


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

Marsh Posté le 08-11-2010 à 08:30:21    

rufo a écrit :

Je pense que le monsieur veut pouvoir choisir la ligne retournée pour chaque regroupement effectué par group by


 
Exact, le ORDER BY organise les résultats du GROUP BY .
 
 
Merci pour vos réponses, je vais faire une sous-requete.

Reply

Marsh Posté le 08-11-2010 à 15:25:48    

On notera qu'un sgbd raisonnable enverra promener quiconque se pointe avec la requête d'origine, en se plaignant qu'il y a des champs non groupables dans le select, au lieu de prendre une valeur au pif.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-11-2010 à 18:05:24    

ah, les sgbd sont plus ce qu'ils étaient. Eux aussi deviennent laxistes :lol:


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

Marsh Posté le 08-11-2010 à 18:07:35    

C'est pas comme si c'était nouveau pour mysql...:D


Message édité par skeye le 08-11-2010 à 18:07:41

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-11-2010 à 17:09:07    

pas besoin d'une sous-requête pour moi (enfin en oracle pas besoin)

Code :
  1. select min(px),revendeur from table where code = 220 group by revendeur;


 
devrait suffire non?
 
Mais il nous manque surtout le principal : que doit faire la requête exactement (description textuelle)

Reply

Marsh Posté le 09-11-2010 à 17:16:22    

dreameddeath a écrit :

pas besoin d'une sous-requête pour moi (enfin en oracle pas besoin)

Code :
  1. select min(px),revendeur from table where code = 220 group by revendeur;


 
devrait suffire non?


Ta requête ne retourne pas tous les champs.:o
 
 


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-11-2010 à 17:16:22   

Reply

Marsh Posté le 09-11-2010 à 20:08:51    

pourquoi retourner tous les champs en faisant un group by ? C'est une mauvaise utilisation du SQL pour moi...
 
En group by, on ne peut soit faire des min, max, sum, ... mais pas directement la liste de des champs : si tu veux tous les champs tu fais un group by [tous les champs] mais ça ne sert à rien...
 
Alors, pourquoi tu veux faire un "group by" (en gros ta requête a quel objectif ?)

Reply

Marsh Posté le 10-11-2010 à 15:03:19    

hutarios a écrit :


ex :
 
id | px | code | des | revendeur
1 | 33  | 220 | 220u | AA
2 | 32  | 220 | 220u | BB
3 | 30  | 220 | 220y | AA
4 | 33  | 220 | 220u | CC
 
SELECT * FROM table WHERE code=220 GROUP BY revendeur  
ça me retourne les lignes 1,2 et 4
a la place de la ligne 1 je voudrai la 3 (celle ou 'px' est le plus petit)


 
en fait l'objectif est d'avoir les valeurs de 'id', 'px', 'des' et 'revendeur' pour chaque 'revendeur' ou 'code'=220 et le 'px' est le plus petit, pour une valeur de 'code' il peut y avoir un ou plusieurs 'revendeur' avec chacun un ou plusieurs 'des' différents.


Message édité par hutarios le 10-11-2010 à 15:03:49
Reply

Sujets relatifs:

Leave a Replay

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