Този въпрос най-често задават по време на интервюто от кандидатите, които са по-нови или с 1 година опит. Дори този въпрос беше зададен от мен може би пъти, когато бях в областта на уеб разработката.
Така че ще ви покажа някои възможни начини да намерите 2-ра или n-та най-висока заплата.
За опит:таблица на служителите (ET)
EID | Име на служител | Заплата |
---|---|---|
1 | Служител-1 | 20 000 |
2 | Служител-2 | 22 000 |
3 | Служител-3 | 21 000 |
4 | Служител-4 | 19 000 |
5 | Служител-5 | 21 000 |
1:- Как да намерите n-та най-висока заплата без условие
В този случай можете да използвате много основни лимит и максимални методи на sql
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
Където n е позицията, която търсите
Ако n=2 заявката ще стане
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
Изходът ще бъде:21 000
2:- Как да намерите всички n-та най-висока заплата, където условието е, че трябва да намерите всички 2-ри най-високоплатени служители.
В този случай можете да използвате функцията за подзаявка на sql.
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
Където n е позицията, която търсите
Ако n=2 заявката ще стане
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
Изходът ще бъде:21 000 , 21 000
3:- Как да намерите 2-ра най-висока заплата, без да използвате LIMIT условия.
В този случай можете да използвате условия NOT IN в sql
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
Изходът ще бъде:21 000
4:- Как да намерите 2-ра най-висока заплата, без да използвате LIMIT и подзаявка
В този случай можете да използвате метода за самостоятелно присъединяване
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
Надяваме се, че това ще ви помогне да намерите правилния отговор според вашите нужди.. 🙂