sql >> Databáze >  >> RDS >> Mysql

Najděte 2. nejvyšší plat nejlepšími možnými způsoby

Tuto otázku většinou kladou v době pohovoru uchazeči, kteří jsou čerstvější nebo mají 1 rok praxe. Dokonce i tato otázka byla položena ode mě v době, kdy jsem přišel v oblasti vývoje webu.

Ukážu vám tedy několik možných způsobů, jak najít 2. nebo n. nejvyšší plat.


Pro Exp:Tabulka zaměstnanců (ET)

EID Jméno zaměstnance Plat
1 Zaměstnanec-1 20 000
2 Zaměstnanec-2 22 000
3 Zaměstnanec-3 21 000
4 Zaměstnanec-4 19 000
5 Zaměstnanec-5 21 000

1:- Jak zjistit n-tou nejvyšší mzdu bez podmínky
V tomto případě můžete použít velmi základní limitní a maximální metody sql

SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1

Kde n je pozice, kterou hledáte
Pokud n=2, stane se dotaz

SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1

Výstup bude:21 000

2:- Jak najít všechny n. nejvyšší platy, kde podmínkou je, že musíte najít všechny 2. nejlépe placené zaměstnance.
V tomto případě můžete použít funkci dílčího dotazu sql.

SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)

Kde n je pozice, kterou hledáte
Pokud n=2, stane se dotaz

SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)

Výstup bude:21 000 , 21 000

3:- Jak najít 2. nejvyšší plat bez použití LIMIT podmínek.
V tomto případě můžete použít NOT IN podmínky v sql

SELECT MAX(Salary) FROM ET
WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)

Výstup bude:21 000

4:- Jak najít 2. nejvyšší plat bez použití LIMIT a dílčího dotazu
V tomto případě můžete použít metodu self-join

SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary
Output will be: 21,000

Doufám, že vám to pomůže najít správnou odpověď podle vašich potřeb.. 🙂

Pokud se vám tento příspěvek líbí, nezapomeňte se přihlásit k odběru Můj veřejný zápisník pro další užitečné věci.


  1. 2 způsoby, jak získat velikost databáze v PostgreSQL

  2. Jak získám desetinná místa při zaokrouhlování průměru v SQL

  3. SQLite - Nějaký rozdíl mezi omezením tabulky UNIQUE a omezením sloupce UNIQUE?

  4. Příklady RAND() v SQL Server