2017-07-27 2 views
1

Je veux faire une requête pour cette ci-dessous la déclaration:
trouver le neuvième employé 9 e salaire le plus élevéce qui est une question de fonctionnement dans SQL Developer

Je trouve ci-dessous recherche de google

SELECT * FROM EMPLOYEE e1 
WHERE N-1 = 
      (SELECT COUNT(e2.ORIG_SALARY) FROM EMPLOYEE e2 
        WHERE e2.ORIG_SALARY > e1.ORIG_SALARY) 
in this query what is functioning role of " e1, e2 & N-1 " 

aidez s'il vous plaît à décrire ceci.

Merci à l'avance

+0

oui dans cette requête qu'est-ce qu'un rôle de fonctionnement de "e1, e2, & n-1" –

Répondre

1

e1,e2 sont des alias. N est numérique autres. Dans votre cas est 9.

Cette requête a une sous-requête corrélée. Pour chaque ligne de l'employé de table, il calcule le compte de l'employé avec le salaire le plus élevé. Pourquoi (N-1, 9-1 = 8) parce que si vous trouvez 8 employés avec le salaire le plus élevé. Probablement la rangée actuelle a le 9ème salaire.

Mais pour moi, cette solution n'est pas claire. Je préfère la fonction analytique pour cela.

Select * from (
SELECT e1.*, DENSE_RANK() OVER (ORDER BY e1.sal) rn FROM emp e1) where rn =9; 



Select * from (
SELECT e1.*, row_number() OVER (ORDER BY e1.sal) rn FROM emp e1) where rn = 9;