Dara Dhillon Ответов: 7

Каков запрос на получение второй по величине зарплаты в таблице employee в SQl?


Я хочу получить вторую по величине зарплату или, скажем, N-ю по величине зарплату ... пожалуйста, помогите?
также Как получить запись о первых n самых высоких зарплатах?

7 Ответов

Рейтинг:
54

Toniyo Jackson

Попробовать это.

Select * from (select  ROW_NUMBER() OVER (ORDER BY Salary DESC) as ID, * from table) as t where ID = n

Н - положение о зарплате


Рейтинг:
45

Wendelius

Если у вас могут быть дубликаты (одна и та же зарплата более одного раза), то один из способов-это:

select c.*
from (select b.onetime, 
             row_number() over (order by b.onetime desc) position
      from (select distinct 
                   a.salary as onetime 
            from   sometable a) b) c
where c.position = 2


если вы хотите получить например топ 5 зарплат то измените условие:
...where c.position <= 5


Рейтинг:
43

thatraja

Вот, держи. Другие Заместители

Второе по величине значение[^]


Рейтинг:
30

RaviRanjanKr

Попробуй

select min(Salary) from TableName where Salary in 
    (select TOP 2 (Salary) from Payroll order by Salary desc)


Dara Dhillon

►►этот действительно работает лучше всего.... супер нравится ◄ ◄

Dara Dhillon

есть ограничение, которое я нашел, то есть если два сотрудника имеют одинаковую максимальную зарплату, то команда будет сортировать min из верхних 2 зарплат, заказанных desc, что даст тот же результат, что и самая высокая зарплата..

saj_21

выберите min(зарплата) из TableName, где зарплата в
(выбрать различные ТОП 2 (зарплата) с целью расчета по заработной плате по алфавиту)

Рейтинг:
28

arathi_suresh

Чтобы получить вторую по величине зарплату,

select max(Salary) from Employee where Salary not in(select max(Salary) from Employee)


Dara Dhillon

.......- идеальный вариант .......

Рейтинг:
1

Sumit Dash

ВЫБИРАТЬ *
От emp e
Где (2) = (
Выберите COUNT( DISTINCT ( e2.sal ) )
От emp e2
Где e2.sal >= e.sal
);


Рейтинг:
0

Sushant298

Hello friend

I will show you very simple way to find the nth Highest Salary.

Lets get started :
Step 1 : Create Table Employee

CREATE TABLE [dbo].[Employee]
(
	[Eid] [int] NULL,
	[EName] [varchar](50) NULL,
	[Salary] [money] NULL
) 

Step 2 : Insert some DummyData

Insert into Employee(Eid,EName,Salary)Values(1,'Employee1',3000)
Insert into Employee(Eid,EName,Salary)Values(2,'Employee2',5000)
Insert into Employee(Eid,EName,Salary)Values(3,'Employee3',4000)
Insert into Employee(Eid,EName,Salary)Values(4,'Employee4',1000)
Insert into Employee(Eid,EName,Salary)Values(5,'Employee5',2000)

Step 3 : Query to fetch Data

- Here we will create one Maintable and one Auxillary table and correlate the Query with the same table.

Select * from Employee E1 where 2 =
(Select count(*) from Employee E2 where E2.Salary >= E1.Salary)

Explation of Query :

1st record of Maintable(E1) i.e 3000 compared with all records from AuxillaryTable(E2)
3000>=3000 - true - count 1
5000>=3000 - true - count 2
4000>=3000 - true - count 3
1000>=3000 - false - count 3  - Count Remains Same
2000>=3000 - false - count 3  - Count Remains Same
In this case count is 3 so condition wont match, now move to next Record

2nd record of Maintable(E1) i.e 5000 compared with all records from AuxillaryTable(E2)
3000>=5000 - false - count 0
5000>=5000 - true - count 1
4000>=5000 - false - count 1  - Count Remains Same
1000>=5000 - false - count 1  - Count Remains Same
2000>=5000 - false - count 1  - Count Remains Same
In this case count is 1 so condition wont match, now move to next Record

3rd record of Maintable(E1) i.e 4000 compared with all records from AuxillaryTable(E2)
3000>=4000 - false - count 0
5000>=4000 - true - count 1
4000>=4000 - true - count 2  
1000>=4000 - false - count 2  - Count Remains Same
2000>=4000 - false - count 2  - Count Remains Same
In this case count is 2 so condition matches as we needed the 2nd highest Salary
Hence the 2nd Higest salary is 4000

If any Query feel free to ask.Thanks


CHill60

Причины моего понижения голоса:
1 - это по существу то же самое, что и решение 6, только с большим количеством слов
2 - объяснение, которое вы использовали, подразумевает переход к следующей записи - это не то, как работает обработка на основе набора- нет понятия "следующая запись"
3 - Вы перечисляете сотрудников со 2 - й самой высокой зарплатой-OP запрашивает только 2-ю самую высокую зарплату (т. е. вы должны использовать distinct или max)
4 - Вы не объяснили, как получить (например) 5-ю самую высокую зарплату
5 - это самое важное - вы использовали коррелированный подзапрос … Вы хотите убить производительность SQL Server? Используйте коррелированные подзапросы. - Продуктивный C# | изучайте C# с помощью практических видеоуроков[^]