Besoin d'aide pour une requete SQL
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.
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
-
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. :) -
ModérateurSous Microsoft SQL Server, je ferais:
select top 3 salaire from latable ORDER BY salaire DESC
ou bienselect top 3 * from latable ORDER BY salaire DESC
-
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 -
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-
-
@aabricotiermerci 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!!! -
@aabricotierç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. -
@archaondon 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 )))) -
@aabricotieren 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...
-
-
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... -
select employee, salaire
from
(
select distinct salaire
from table
order by 1 desc
)
where rownum <= 3-
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. -
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> -
@yanbanil 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.
-