Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha o segundo valor mais alto em uma tabela MySQL


Aqui está um que leva em conta os laços.
Name    Salary
Jim       6
Foo       5
Bar       5
Steve     4

SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees WHERE salary < (SELECT MAX(salary) FROM employees))

Result --> Bar 5, Foo 5

EDITAR: Peguei o segundo post de Manoj, ajustei-o e tornei-o um pouco mais legível para humanos. Para mim n-1 não é intuitivo; no entanto, usando o valor que eu quero, 2=2º, 3=3º, etc. é.
/* looking for 2nd highest salary -- notice the '=2' */
SELECT name,salary FROM employees
WHERE salary = (SELECT DISTINCT(salary) FROM employees as e1
WHERE (SELECT COUNT(DISTINCT(salary))=2 FROM employees as e2
WHERE e1.salary <= e2.salary)) ORDER BY name

Result --> Bar 5, Foo 5