107 votes

Comment trouver le troisième ou énième salaire maximal de salaire de table?

Comment trouver third or nth maximum du salaire de salaire table(EmpID,EmpName,EmpSalary) dans le Optimisé façon?

Merci à l'Avance.

94voto

Kumar Manish Points 1270

Numéro De Ligne :

SELECT Salary,EmpName
FROM
  (
   SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum
   FROM EMPLOYEE
   ) As A
WHERE A.RowNum IN (2,3)

Sous Requête :

SELECT *
FROM Employee Emp1
WHERE (N-1) = (
               SELECT COUNT(DISTINCT(Emp2.Salary))
               FROM Employee Emp2
               WHERE Emp2.Salary > Emp1.Salary
               )

Top Des Mots Clés :

SELECT TOP 1 salary
FROM (
      SELECT DISTINCT TOP n salary
      FROM employee
      ORDER BY salary DESC
      ) a
ORDER BY salary

90voto

Tim Schmelter Points 163781

Utiliser ROW_NUMBER(si vous voulez qu'un seul) ou DENSE_RANK(pour toutes les lignes):

WITH CTE AS
(
    SELECT EmpID,EmpName,EmpSalar,
           RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
    FROM dbo.Salary
)
SELECT EmpID,EmpName,EmpSalar
FROM CTE
WHERE RN = @NthRow

68voto

Codesen Points 1069

Essayez ceci

SELECT TOP 1 salary FROM (
   SELECT TOP 3 salary 
   FROM employees 
   ORDER BY salary DESC) AS emp 
ORDER BY salary ASC

Pour 3, vous pouvez remplacer n'importe quel valeur...

47voto

Si vous souhaitez optimiser signifie pas utiliser de mot-Clé, de Sorte que le nième max et min salaires requête comme suit.

N salaire maximum

SÉLECTIONNEZ MIN(EmpSalary) DE Salaire OÙ EmpSalary IN(SELECT TOP N EmpSalary DE Salaire de l'ORDRE PAR EmpSalary DESC)

Ex: 3 salaire maximum

SÉLECTIONNEZ MIN(EmpSalary) DE Salaire OÙ EmpSalary IN(SELECT TOP 3 EmpSalary DE Salaire de l'ORDRE PAR EmpSalary DESC)

N salaire minimum

SELECT MAX(EmpSalary) DE Salaire OÙ EmpSalary IN(SELECT TOP N EmpSalary DE Salaire de l'ORDRE PAR EmpSalary ASC)

Ex: 3 salaire maximum

SÉLECTIONNEZ MIN(EmpSalary) DE Salaire OÙ EmpSalary IN(SELECT TOP 3 EmpSalary DE Salaire de l'ORDRE PAR EmpSalary ASC)

11voto

Pankaj Gaikwad Points 39
SELECT Salary,EmpName
FROM
(
SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE
) tbl
WHERE Rno=3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X