#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