#1 Thu 27 September 2007 13:53
- toulousig
- Participant actif
- Lieu: Toulouse
- Date d'inscription: 5 Sep 2005
- Messages: 50
RequĂȘte avec Max() et Group By
Bonjour,
J'ai une table qui contient 3 colonnes : "Quartier", "Nb", "Ets".
Je souhaite connaßtre pour chaque "Quartier" la plus grande valeur de "Nb" et l' "Ets" associé.
Lorsque je fais cette requĂȘte :
SELECT max(Nb), Quartier, Ets From MaTable Group By Quartier
j'obtiens bien le plus grand "Nb" par quartier mais la valeur de "Ets" n'est pas celle associée au plus grand "Nb" mais le premier du Quartier (cela vient du Group By).
J'ai fait plusieurs tests de sous requĂȘte mais sans succĂšs...
Qqn a-t-il une idée ou a déjà fais ce genre de choses ?
Merci.
Hors ligne
#2 Thu 27 September 2007 14:35
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: RequĂȘte avec Max() et Group By
Bonjour,
En premiÚre analyse je ferai ça en deux étapes par quartier
Select Max(Nb) from MaTable where Quartier="quartier1" into Sel1
Select * from MaTable, Sel1 where MaTable.Nb=Sel1.COL1 into MaxQuartier1
Voir aussi cette discussion
ps: n'oubliez pas de faire une recherche avant de poster ![]()
Hors ligne
#3 Thu 27 September 2007 14:52
- toulousig
- Participant actif
- Lieu: Toulouse
- Date d'inscription: 5 Sep 2005
- Messages: 50
Re: RequĂȘte avec Max() et Group By
Oui, j'ai bien pensĂ© de faire 2 requĂȘtes mais j'ai 60 quartiers... j'aurai donc prĂ©fĂ©rĂ© faire cela en une seule fois, de plus lors des mises Ă jour de la table je ne recommence pas tout.
ps: j'ai effectué une recherche avant de poster, et j'ai vu cette discussion mais elle ne répond pas à mon pb...
Hors ligne
#4 Thu 27 September 2007 14:53
- Maestro de la salsa
- Participant actif
- Date d'inscription: 7 Jun 2006
- Messages: 133
Re: RequĂȘte avec Max() et Group By
Bonjour,
En deux fois:
1-Requete 1: Select Quartier, max(NB) From matable group by Quartier
2-sauvegarder la requete (req1 avec comme nom de colonne Max(NB)= Col2 par exemple)
3-Select matable.Quartier,matable.NB,matable.Ets from matable,req1 where matable.quartier=req1.quartier and matable.NB=req1.Col2
Il ya peut ĂȘtre plus simple...
Hors ligne
#5 Thu 27 September 2007 15:09
- toulousig
- Participant actif
- Lieu: Toulouse
- Date d'inscription: 5 Sep 2005
- Messages: 50
Re: RequĂȘte avec Max() et Group By
Nos messages ont dĂ» se croiser Maestro...
Donc non, je ne préfÚrerais pas faire en 2 fois.
Hors ligne
#6 Thu 27 September 2007 15:18
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: RequĂȘte avec Max() et Group By
Bravo Maestro ![]()
C'est nickel ... en attendant plus simple (mais je n'y crois pas!!)
L'Ă©tape 2 est par contre inutile: MapInfo Ă©crira "tout seul" req1.Col2 quand vous pointerez (dans le requĂȘteur) sur req1.max(NB)
Pour Toulousig: on ne peut pas toujours tout faire d'un coup. Souvent si on y arrive c'est qu'on doit créer (physiquement !!) un Copie_de_MaTable et travailler sur ces 2 tables ...Pas forcément mieux
Hors ligne
#7 Thu 27 September 2007 17:01
- J. Caba
- Juste Inscrit !
- Lieu: Auzeville-Tolosan
- Date d'inscription: 11 Sep 2006
- Messages: 6
Re: RequĂȘte avec Max() et Group By
Bonjour,
Faire quelque chose comme ça :
Select Quartier, nb, ets from TaTable where Quartier in (select max(nb) from TaTable group by Quartier INTO selection) INTO toto
Je dis ça sans tester, à la "va vite"... (en plus faut considérer le champ Quartier comme sans doublons)
--
JérÎme
Hors ligne
#8 Thu 27 September 2007 17:09
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: RequĂȘte avec Max() et Group By
Bonjour JérÎme
Ca me surprendrait que MapInfo ne couine pas avec cette syntaxe ... ![]()
Hors ligne
#9 Fri 28 September 2007 09:53
- J. Caba
- Juste Inscrit !
- Lieu: Auzeville-Tolosan
- Date d'inscription: 11 Sep 2006
- Messages: 6
Re: RequĂȘte avec Max() et Group By
Non non, MI ne couine pas mais ma syntaxe est totalement farfelue, je l'admet
.
Par contre, aprÚs vérif, en voici une qui fonctionne :
Code:
Select * from maTable where nb in (select max(nb) from maTable group by quartier) into Selection
C'est testĂ© mais avec un contrainte : il faut qu'un "ets" soit unique dans la table (1ets 1quartier), sinon cette requĂȘte n'a bien sĂ»r plus de sens.
Je pense cependant que les solutions proposées (en plusieurs étapes) sont les plus pertinentes et les moins dangereuses.
C'Ă©tait pour le fun de le faire en une requĂȘte ![]()
--
JérÎme
Hors ligne
#10 Fri 28 September 2007 10:59
- toulousig
- Participant actif
- Lieu: Toulouse
- Date d'inscription: 5 Sep 2005
- Messages: 50
Re: RequĂȘte avec Max() et Group By
Malheureusement "ets" n'est pas unique...
Hors ligne

