banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#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 smile

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 smile
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 ... smile

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 smile .
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 smile

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

 

Pied de page des forums

Copyright Association GeoRezo