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