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

Encontre o 2º salário mais alto e as melhores maneiras possíveis


Esta pergunta é feita principalmente no momento da entrevista dos candidatos que são calouros ou experiência de 1 ano. Mesmo esta pergunta feita por mim pode vezes quando eu estava começando no campo de desenvolvimento web.

Então, vou mostrar algumas maneiras possíveis de encontrar o 2º ou nº salário mais alto.






Para Exp:Tabela de Funcionários (ET)
EID NomeFuncionário Salário
1 Funcionário-1 20.000
2 Funcionário-2 22.000
3 Funcionário-3 21.000
4 Funcionário-4 19.000
5 Funcionário-5 21.000

1:- Como encontrar o enésimo salário mais alto sem condição
Neste caso, você pode usar métodos muito básicos de limite e máximo de sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1

Onde n é a posição que você está procurando
Se n=2 a consulta se tornará
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1

A saída será:21.000

2:- Como encontrar todos os enésimos salários mais altos, onde a condição é que você encontre todos os 2ºs funcionários mais bem pagos.
Neste caso, você pode usar o recurso de subconsulta do sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)

Onde n é a posição que você está procurando
Se n=2 a consulta se tornará
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)

A saída será:21.000 , 21.000

3:- Como encontrar o 2º maior salário sem usar condições LIMIT.
Neste caso você pode usar condições NOT IN no sql
SELECT MAX(Salary) FROM ET
WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)

A saída será:21.000

4:- Como encontrar o 2º salário mais alto sem usar LIMIT e Sub-Query
Neste caso você pode usar o método self-join
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary
Output will be: 21,000

Espero que isso ajude você a encontrar a resposta certa conforme sua necessidade.. 🙂

Se você gostou deste post, não se esqueça de se inscrever em Meu Caderno Público para mais coisas úteis.