|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 549 ![]() |
Bonjour à tous,
j'ai une table R1 avec les champs et données suivantes : Nom..Région..Valeur Paul........33..............4 Paul........FR001.........31 Paul........FR003...........1 Paul........FR005...........1 Paul........FR27...........1 Pierre.....FR001........630 Pierre.....FR32............1 Martin.....FR001........624 Martin.....FR002........1 Arthur........FR001........378 Arthur........FR32........2 Michel........FR001........566 Michel........FR003........1 et en fait je souhaite faire une requête pour obtenir pour chaque Nom, la région dont la valeur est maximale. Paul FR001 31 Pierre FR001 630 Martin FR001 624 etc... Comment faire svp ? Par avance merci a+ Dams' |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bonjour,
Intéresse-toi à la requête de forme regroupement (le sigma majuscule). Tu regroupes sur le nom et tu demandes Max pour la valeur. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour à tous,
... avec, ensuite, une liaison de cette requête de regroupement avec la table d'origine pour savoir de quelle région est le Max(Valeur) trouvé de Nom. Pas sûr d'être très clair, sur ce coup là...
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bien vu Richard,
Cet oubli me donne l'occasion de te saluer ! |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Je te salue bien bas, Claude... et bravo pour ton aide prolifique et, néanmoins, précieuse... comme quoi, parfois, cela n'a rien à voir...
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 549 ![]() |
hello,
oui j'ai réussi cela en faisant 2 requêtes comme vous me l'avez conseillé. Mais je pensais qu'on pouvait le faire directement en 1 seule. Non ? |
|
|
00
|
|
|
#7 | |||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Damsmut et Claude,
Citation:
SQL groupe selon les champs que l'on sélectionne (SELECT), et c'est bien normal car, le groupage d'enregistrements n'est pas la même opération que le repérage d'un enregistrement APRES groupage (peut-être pas très clair). Donc, dans le SQL : Code sql :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|||
|
|
00
|
|
|
#8 | ||||||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonjour à tous,
pour compléter ce qui a déjà été dit, on peut effectivement "imbriquer" les deux requêtes en une mais dans ce cas il faudra se salir en trempant ses mains dans le gros SQL qui tâche... A quelque chose près, si on crée nos deux requêtes avec les assistants, le SQL donne: SousRequete: Code sql :
puis la requête principale qui reprend ma sous-requête dont le SQL donne: Code sql :
En "imbriquant" le SQL de SousRequete (attention aux éclaboussures), on obtient une seule requête enregistrée: Code sql :
j'espère que je n'ai pas fait d'erreurs, SQL donne toujours un peu mal à la tête
|
||||||
|
10
|
|
|
#9 | |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bonjour,
Citation:
![]() Je me suis fait un copion (= antisèche hexagonal). Je vous le livre pour ce qu'il vaut. Recette « vulgum pecus » de la demande de damsmut 1re étape : pour chaque nom, quelle est la valeur maximale ? 2e étape : pour cette valeur, quelle est la région ? En images : ![]() Recette « 2 en 1 » - Partez du sql de la deuxième : SELECT R1.Nom, R1.Region, R1.Valeur FROM R1 INNER JOIN Trad1 ON (R1.Nom = Trad1.Nom) AND (R1.Valeur = Trad1.ValeurMaxi); - Repérez la 1e occurrence du nom de la première requête : SELECT R1.Nom, R1.Region, R1.Valeur FROM R1 INNER JOIN Trad1 ON (R1.Nom = Trad1.Nom) AND (R1.Valeur = Trad1.ValeurMaxi); - Juste avant, insérer entre crochets le sql de la première requête - sans le point-virgule final et faites suivre cette expression de « .AS<espace> » dans notre exemple : SELECT R1.Nom, R1.Region, R1.Valeur FROM R1 INNER JOIN [SELECT R1.Nom, Max(R1.Valeur) AS ValeurMaxi FROM R1 GROUP BY R1.Nom]. AS trad1 ON (R1.Valeur = trad1.ValeurMaxi) AND (R1.Nom = trad1.Nom); - Goûter. - Ah oui ! J'oubliais : pour la deuxième recette, portez un tablier... les éclaboussures ! Bon weekend ! |
|
|
|
10
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonjour à vous tous,
pour ceux qui ont conservé leur tablier...sinon z'allez foutre du SQL partout Par exemple pour Paul, on peut remarquer que 31 est supérieure ou égale à toutes les valeurs prises pour Paul (31>=31, 31>=4, 31>=1, 31>=1, 31>=1). Dès lors on peut traduire ça en SQL avec l'opérateur ALL: Code sql :
En pratique, j'hésite à utiliser cet opérateur ALL. Il faudrait vérifier ses performances... |
||
|
10
|
|
|
#11 |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 549 ![]() |
hello,
pour clôturer le sujet j'ai utilisé la même méthode que Claude. Elle a l'avantage d'être graphique. merci à tous a+ |
|
|
00
|
|
|
#12 | |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 549 ![]() |
Par contre une remarque pour Claude,
Citation:
je n'ai pas mis entre crochets mais entre parenthèses... et sans faire suivre d'un point !! C'est même pareil dans ton exemple qu t'as mis en téléchargement... |
|
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bonjour,
... et même sans le "as". Ma recette n'est pas encore au point... et mon tablier est déjà à la lessive. En fait je me suis basé sur la solution donnée par Fabien et j'ai essayé de trouver un algorithme pour y arriver par étapes. J'ai trop vite conclu avoir trouvé. Je reviens si je trouve. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com