Select ds Oracle (Complexe ?!)

Résolu/Fermé
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 27 avril 2012 à 10:54
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 2 mai 2012 à 14:08
Bonjour,
la requête suivante, me retourne le nombre total d'achat d'un client chez un vendeur :

SELECT v.vdr_tk , c.cli_tk, COUNT(*) total_tr 
FROM achat a, vendeur v, client c 
WHERE (a.vdr_tk  = v.vdr_tk) AND (a.cli_tk  = c.cli_tk) 
GROUP BY v.vdr_tk , c.cli_tk 
ORDER BY c.cli_tk


J'obtiens par exemple :
------------------------------------
| Id vendeur | Id Client | Nb d'achat
|-----------------------------------
| 1234 | 230 | 45
|-----------------------------------
| 5969 | 230 | 125
|-----------------------------------
| 9972 | 596 | 12
|-----------------------------------
| 4412 | 596 | 129
|-----------------------------------
Mais je voudrais obtenir, le nombre maximum d'achat chez un vendeur par client et donc le tableau suivant :
------------------------------------
| Id vendeur | Id Client | Nb d'achat
|-----------------------------------
| 5969 | 230 | 125
|-----------------------------------
| 4412 | 596 | 129

Mais comment faire ? Je rappelle que je travaille dans Oracle et donc la commande Top qu'on trouve dans MSAccess n'existe pas ...
Dans ce cas-ci, la commande Max ne peut être utiliser non plus puisqu'il y a un regroupement sur l'identifiant du dossier et du vendeur !

Merci d'avance






|-----------------------------------



Krilin
« Je suis pas contre les excuses...je suis même prêt à en recevoir. » (Les grandes familles) :-)

3 réponses

jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
Modifié par jee pee le 27/04/2012 à 11:17
Salut,

J'essaierai quelque chose comme :

select vdr_tk, cli_tk, max(total_tr)   
from ( SELECT v.vdr_tk , c.cli_tk, COUNT(*) total_tr    
 FROM achat a, vendeur v, client c    
 WHERE (a.vdr_tk  = v.vdr_tk) AND (a.cli_tk  = c.cli_tk)    
 GROUP BY v.vdr_tk , c.cli_tk )   
group by cdr_tk, cli_tk; 

cdlt

Un étranger, c'est un ami qu'on n'a pas encore rencontré.
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
2 mai 2012 à 10:38
Salut,
je l'avais fait cette requête mais comme l'identidiant du vendeur est présent, j'ai le même résultat :-/
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
2 mai 2012 à 14:08
J'ai trouvé :
SELECT Q1.*
(
SELECT v.vdr_tk , c.cli_tk, COUNT(*) total_tr
FROM achat a, vendeur v, client c
WHERE (a.vdr_tk = v.vdr_tk) AND (a.cli_tk = c.cli_tk)
GROUP BY v.vdr_tk , c.cli_tk
)
Q1
INNER JOIN
(
SELECT c.cli_tk, COUNT(*) total_tr
FROM achat a, vendeur v, client c
WHERE (a.vdr_tk = v.vdr_tk) AND (a.cli_tk = c.cli_tk)
GROUP BY v.vdr_tk , c.cli_tk
)
Q2
WHERE (Q1.cli_tk = Q2.cli_tk) AND (Q1.total_tr = Q2.total_tr)

Merci quand même pour l'aide.
0