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.. 🙂