¿Consulta SQL para encontrar el segundo salario más alto?

Considere la siguiente tabla simple: 

Name     Salary
---------------
abc     100000
bcd     1000000
efg     40000
ghi     500000

Cómo encontrar al empleado cuyo salario es el segundo más alto. Por ejemplo, en la tabla anterior, «ghi» tiene el segundo salario más alto con 500000. 

A continuación se muestra una consulta simple para encontrar al empleado cuyo salario es más alto. 

  select *from employee where salary=(select Max(salary) from employee);

Podemos anidar la consulta anterior para encontrar el segundo salario más alto. 

select *from employee 
group by salary 
order by  salary desc limit 1,1;

Hay otras formas:

SELECT name, MAX(salary) AS salary 
FROM employee 
WHERE salary IN
(SELECT salary FROM employee MINUS SELECT MAX(salary) 
FROM employee); 
SELECT name, MAX(salary) AS salary 
FROM employee 
WHERE salary <> (SELECT MAX(salary) 
FROM employee);

EN SQL Server usando Common Table Expression o CTE , podemos encontrar el segundo salario más alto: 

WITH T AS
(
SELECT *
   DENSE_RANK() OVER (ORDER BY Salary Desc) AS Rnk
FROM Employees
)
SELECT Name
FROM T
WHERE Rnk=2;

¿Cómo encontrar el tercer salario más grande?  
Simple, podemos hacer un anidamiento más.  

SELECT name, MAX(salary) AS salary
  FROM employee
 WHERE salary < (SELECT MAX(salary) 
                 FROM employee
                 WHERE salary < (SELECT MAX(salary)
                 FROM employee)
                ); 

Tenga en cuenta que en lugar de anidar para el segundo, tercer, etc. salario más grande, podemos encontrar el enésimo salario usando una consulta general como en MySQL: 

SELECT salary 
FROM employee 
ORDER BY salary desc limit n-1,1
SELECT name, salary
FROM employee A
WHERE n-1 = (SELECT count(1) 
             FROM employee B 
             WHERE B.salary>A.salary)

Si varios empleados tienen el mismo salario. 
Suponga que tiene que encontrar el cuarto salario más alto 

SELECT * FROM employee 
WHERE salary= (SELECT DISTINCT(salary) 
FROM employee ORDER BY salary LIMIT 3,1);

La consulta genérica será 

SELECT * FROM employee 
WHERE salary= (SELECT DISTINCT(salary) 
FROM employee ORDER BY salary DESC LIMIT n-1,1);

Esta solución es proporcionada por Mohit.

Este artículo es una contribución de Kartik. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *