2011-03-04 2 views
0

Quelqu'un peut-il m'expliquer comment cette requête va fonctionner et trouver nième salaire le plus élevé de la table des salaires.Quelqu'un peut-il me dire, Comment fonctionne cette requête?

SELECT salary FROM salary_master s1 
WHERE (n-1) = (SELECT COUNT(*) FROM salary_master WHERE salary > s1.salary) 

Je veux dire que cette requête parcourra toutes les valeurs?

Aidez-moi.

+0

est la colonne salaire indexé? – Chandu

+0

NON .. il n'est pas indexé. – Jimit

+0

Ensuite, cela va fonctionner, mais pas très vite :) – Konerak

Répondre

1

La sous-requête comptera 'combien d'éléments ont un plus grand salaire que l'élément actuel'. Ensuite, votre requête principale vérifie si l'élément en cours dans la table a n-1 éléments qui ont un salaire plus élevé.

Par exemple, pour n = 5, la requête recherchera un élément où 4 autres éléments ont un salaire plus élevé. Ainsi, il trouvera le 5ème plus haut.

Cependant, ce n'est pas la meilleure façon de procéder. Envisagez d'utiliser ORDER BY et LIMIT ...

2

Non, cela ne va pas itérer en tant que tel. C'est toujours une requête normale.

Comme vous pouvez le voir, il compte tous les salaires dans la sous-requête qui est plus grande que l'entrée de ligne en cours. Donc, si vous êtes le meilleur soutien, vous ne devriez pas avoir de salaire supérieur au vôtre, c'est pourquoi le -1.

3

qui ne trouve pas le nième salaire le plus élevé, mais cela:

SELECT salary 
FROM salary_master 
ORDER BY salary DESC 
OFFSET n 
LIMIT 1 
Questions connexes