Esta pregunta se hace principalmente en el momento de la entrevista a los candidatos que son nuevos o tienen 1 año de experiencia. Incluso esta pregunta me la hicieron muchas veces cuando estaba en el campo del desarrollo web.
Así que voy a mostrarle algunas formas posibles de encontrar el segundo o el enésimo salario más alto.
Para Exp:Tabla de empleados (ET)
EID | Nombre del empleado | Salario |
---|---|---|
1 | Empleado-1 | 20.000 |
2 | Empleado-2 | 22 000 |
3 | Empleado-3 | 21 000 |
4 | Empleado-4 | 19 000 |
5 | Empleado-5 | 21 000 |
1:- Cómo encontrar el enésimo salario más alto sin condición
En este caso, puede usar métodos muy básicos de límite y máximo de sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Donde n es la posición que está buscando
Si n=2 la consulta se convertirá en
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
La salida será:21 000
2:- Cómo encontrar el enésimo salario más alto donde la condición es que debe encontrar todos los 2.º empleados mejor pagados.
En este caso, puede usar la función de subconsulta de sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Donde n es la posición que está buscando
Si n=2 la consulta se convertirá en
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
La salida será:21 000 , 21 000
3:- Cómo encontrar el segundo salario más alto sin usar condiciones LIMIT.
En este caso, puede usar las condiciones NOT IN en sql
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
La salida será:21 000
4:- Cómo encontrar el segundo salario más alto sin usar LIMIT y Sub-Query
En este caso, puede usar el método de auto-unión
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Espero que esto te ayude a encontrar la respuesta correcta según tus necesidades... 🙂