|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
Bonjour,
Est-ce que la clause group by effectue un tri sur les champs spécifiés. En gros, est ce qu'il est inutile de préciser la clause order by dans une requête de ce type : Code :
Merci d'avance pour vos lumières. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ça marche... mais dans une requête imbriquée, j'ai du mal à voir en quoi l'ordre pourrait avoir de l'importance
|
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Le document SQL Reference de la 10GR2 dit explicitement pour GROUP BY:
Citation:
Citation:
|
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
A partir de la 9i tu es obligé de préciser la clause order by si tu veux avoir des lignes triées.
Dans les versions précédentes d'oracle (au moins la 7 et la 8i), le group by triait les lignes.
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#5 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
Ok Merci.
Pour la requête imbriquée : J'ai une table article (clé CIART) et une table Article-fournisseur (clé CIART, AFNUM avec un champ qui va préciser si c'est un fournisseur principal) Voilà la requête que j'aurai écrite sous MS SQL server pour obtenir pour tous mes articles le premier fournisseur principal (ou pas si il n'y en a pas) Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
comme tu fais un IN toutes les lignes sont traitées alors l'ordre est inutile
Edit : je comprends... sous Oracle c'est complétement faux
|
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
Non j'ai le top 1 qui me retourne uniquement la première ligne en fonction de mon order by (et vu que j'ai un seul enregistrement de retourné je pourrai mettre = au lieu de in).
Sous Oracle (si le order by marchait ds les requêtes imbriquées), j'écrirais cette requête ainsi : Code :
|
||
|
|
00
|
|
|
#8 | ||||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ou alors :
Code :
ou alors : Code :
|
||||
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
La première requête va me retourner plusieurs lignes pour un seul article si j'ai plusieurs fournisseurs principaux et pas de ligne si j'ai pas de fournisseur principal --> j'en veux quoi qu'il arrive une seule (à part si j'ai pas de fournisseur du tout).
La deuxième requête avec le group by sur la clé primaire (?) ne va pas solutionner mon problème non plus. Peut-être une autre idée? |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
je veux bien un petit test case parce qu'à mon avis, ta requête ne marche pas non plus du coup
|
|
|
00
|
|
|
#11 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
J'explique ma requête :
Code :
Par contre mon order by me permet d'avoir dans les premières lignes mes fournisseurs principaux (s'il y a). Du coup la requête suivante me permet de me retourner mon premier identifiant de mon fournisseur souhaité : Code :
Bref il faut que j'arrive à touner cette requête bien comme il faut |
||||
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
Y'a les fonctions analytiques, sinon, faut faire une fonction qui te ramènes pour un article donné, le premier fournisseur, mais niveau perfs, pas terrible.
Voici un test avec les fonctions analytiques, j'ai tenté de retransposer ça pour toi, mais faut tester. Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
Je ne connais pas les fonctions analytiques mais la requête semble fonctionner.
Je vais essayer de comprendre la syntaxe maintenant. Par contre effectivement niveau perf, c'est pas terrible car mes 2 tables sont assez conséquentes. Merci du conseil en tous cas, j'vais tenter de gratter encore un peu pour voir si je ne trouve pas la requête qui tue. |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Pour plus d'infos sur les fonctions analytiques :
http://lalystar.developpez.com/fonctionsAnalytiques/
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2003 Messages : 45 ![]() |
Finalement j'ai opté pour la fonction. Je ne vais pas être tatillon sur la perf car la requête est tout de même très rapide.
Merci de votre aide. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com