Besoin d'aide pour une requete SQL

Fermé
archaon - 17 oct. 2003 à 16:36
 archaon - 18 oct. 2003 à 15:20
bonjours à tous.

voilà, je dois ecrire une requete SQL qui dans une table contenant un numeroo d'employé numemp et son salaire salaire, dois retourner les 3 plus gros salaires de la table...

un petit challenge pour ceux qui aiment se lancer quelques défis (en tout cas, pour moi, c'en est un !!!)

merci à ceux qui veulent y reflechir et me transmettre leur solution.

6 réponses

Utilisateur anonyme
17 oct. 2003 à 16:44
Salut,
Quel est le SGBD ?
Avec mysql, je ferais:
SELECT salaire FROM latable ORDER BY salaire ASC LIMIT 0,3


Wouala...

Kalamit,
Parle à ma culasse, mon carter est malade. :)
0
Utilisateur anonyme
17 oct. 2003 à 17:00
Youps, petite erreur...

SELECT salaire FROM latable ORDER BY salaire DESC LIMIT 0,3


Kalamit,
Parle à ma culasse, mon carter est malade. :)
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
17 oct. 2003 à 16:52
Sous Microsoft SQL Server, je ferais:
select top 3 salaire from latable ORDER BY salaire DESC

ou bien
select top 3 * from latable ORDER BY salaire DESC
0
merci beaucoup. je m'excuse mais j'ai en effet oublié quelques informations très importante. je travaille sous Oracle 9i (sql*plus) et je dois le faire sous la forme de requetes syncronisée.

je vous remercie.

Archaon
0
merci.
en effet j'ai oublié qq info.
je travaille sous sql*plus (Oracle 9i).
de plus, je dois le fairesous la forme de requetes syncronisées..

merci encore

archaon
0
aabricotier
17 oct. 2003 à 22:58
salut archaon
essai toujours ca , je ne l'ai pas essayé mais ...

select * from matable where salaire >= (
select max(salaire) from matable where salaire not in (
select max(salaire) from matable where salaire not in (
select max(salaire) from matable )))
0
archaon > aabricotier
17 oct. 2003 à 23:15
merci beucoup.
ta requete est presque parfaite. je viens de la tester mais elle ne retourne que les 2 plus gros salaires.
mais je pense que je vais pouvoir me débrouiller avec ça.

merci encore!!!
0
archaon > aabricotier
17 oct. 2003 à 23:22
ça y est. en fait il suffisait juste de rajouter encore une fois


select max(salaire) from matable where salaire not in (

merci encore de ton aide aabricotier.
0
aabricotier > archaon
17 oct. 2003 à 23:25
don ca doit etre ca

select * from matable where salaire >= (
select max(salaire) from matable where salaire not in (
select max(salaire) from matable where salaire not in (
select max(salaire) from matable where salaire not in (
select max(salaire) from matable ))))
0
archaon > aabricotier
17 oct. 2003 à 23:43
en fait je crois que c'est pas aussi simple.
parce que si les 4 plus gros salaires sont 2200, 2200, 2000, 2000,
cette requette retournera les 4 alors qu'il n'en faut que 3...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
du nouveau : le probleme se complique un peu plus.
il faut que ce soit fait à l'aide de requetes syncronisées et avec une jointure entre le inner et le outter. Donc d'apres ce que je comprends, seules 2 requetes syncronisées suffiraient à le faire...
0
select employee, salaire
from
(
select distinct salaire
from table
order by 1 desc
)
where rownum <= 3
0
merci.
mais ta requete ne marche pas lorsque dans les 3 plus gros salaires, 2 ou les 3 sont identiques.
De plus, la réponse demandée doit comporter une jointure comme par exemple :

select *
from lemp outter
where outter.salaire >= ( select max(inner.salaire)
from lemp inner
where outter.salaire = inner.salaire)
;

merci quand meme. c'est tres sympa.
0
Je ne sais pas par quoi tu veux passer mais à mon avis là c'est la solutioon la plus simple :

SQL> select sal, empno from emp order by sal desc;

SAL EMPNO
---------- ----------
5000 7839
3000 7788
3000 7902
2975 7566
2850 7698
2450 7782
1600 7499
1500 7844

Donc là on vt récuperr 7839,7788 et 7902
on fait :
SQL> select *
2 from ( select SAL, empno
3 from EMP
4 order by 1 desc )
5 where rownum <= 3
6 ;

SAL EMPNO
---------- ----------
5000 7839
3000 7788
3000 7902

SQL>
0
archaon > yanban
18 oct. 2003 à 15:20
il est vrai que ta requete marche.

mais le probleme c'est qu'on me demande quelque chose de précis...


en plus, je n'ai aucune idée de ce que inner et outter veulent dire dans des requetes syncronisées.

je te remercie quand meme bcp de ton aide.
0