Самая высокая зарплата в каждом отделе

У меня есть таблица EmpDetails :

DeptID      EmpName   Salary
Engg        Sam       1000
Engg        Smith     2000
HR          Denis     1500
HR          Danny     3000
IT          David     2000
IT          John      3000

Мне нужно сделать запрос, чтобы найти самую высокую зарплату для каждого отдела.

22
задан mwilczynski 9 July 2018 в 18:54
поделиться

10 ответов

with ctesal as (
 select DepartmentId , Name , Salary, ROW_Number() OVER (partition by DepartmentId 
 order by Salary desc) as RowNum
 from dbo.Employee
 )
 select DepartmentId , Name , Salary , RowNum from ctesal where RowNum  =2;

Это применимо к серверу SQL. ROW_Number - это встроенная функция в SQL-сервере. Он дает счет, начиная с 1, в зависимости от разбиения по и по порядку. В конце концов, мы можем написать, где условие на основе наших требований.

0
ответ дан 29 November 2019 в 03:21
поделиться

Если вы просто хотите получить самую высокую зарплату из этой таблицы, по отделам:

SELECT MAX(Salary) FROM TableName GROUP BY DeptID
1
ответ дан 29 November 2019 в 03:21
поделиться

Использовать коррелированный подзапрос:

SELECT DeptID, EmpName, Salary
FROM EmpDetails a
WHERE Salary = (SELECT MAX(Salary) 
                FROM EmpDetails b
                WHERE a.DeptID = b.DeptID)
1
ответ дан 29 November 2019 в 03:21
поделиться

Это наилучшее из возможных решений для ORACLE:

Select * from (select customerid, city, freight,
row_number() over (partition by customerid order by freight desc) Row_Number from 
(select orders.orderId, customers.CUSTOMERID, customers.city, orders.FREIGHT from orders inner join customers on orders.customerid = customers.customerid where customers.country='Germany' order by customers.customerid, orders.freight desc) 
order by customerid, freight desc) where Row_Number<=2;

. Обратите внимание, здесь я использовал разделение по выражению для маркировки номера строки, главным образом потому, что нам нужно разделить записи, группируя их по идентификатору клиента. , Я использовал два внутренних запроса здесь. Самый внутренний запрос состоит в том, чтобы дать представление, которое сортируется в соответствии с идентификатором клиента и уменьшением порядка стоимости. Теперь мы должны всегда получать две верхние записи, поэтому сначала нам нужно назвать их, а затем отфильтровать по rownum. Запрос второго уровня - пометить rownum в соответствии с идентификатором клиента. И последний запрос отфильтрует результат в соответствии с rownum. Для каждого раздела.

2
ответ дан 29 November 2019 в 03:21
поделиться

Эрмн, что-то вроде:

select 
   d.DeptID,
   max(e.Salary)
from
   department d
   inner join employees e on d.DeptID = e.DeptID
group by
  d.DeptID
2
ответ дан 29 November 2019 в 03:21
поделиться

Используйте следующую команду;

SELECT  A.*
    FROM    @EmpDetails A
            INNER JOIN ( SELECT DeptID ,
                                MAX(salary) AS salary
                         FROM   @EmpDetails
                         GROUP BY DeptID
                       ) B ON A.DeptID = B.DeptID
                              AND A.salary = B.salary
    ORDER BY A.DeptID
2
ответ дан 29 November 2019 в 03:21
поделиться
SELECT empname
FROM empdetails
WHERE salary IN(SELECT deptid max(salary) AS salary
FROM empdetails
group by deptid)
2
ответ дан 29 November 2019 в 03:21
поделиться
SELECT D.DeptID, E.EmpName, E.Salary
FROM Employee E
INNER JOIN Department D ON D.DeptId = E.DeptId
WHERE E.Salary IN (SELECT MAX(Salary) FROM Employee);
1
ответ дан 29 November 2019 в 03:21
поделиться
SELECT empName,empDept,EmpSalary
FROM Employee
WHERE empSalary IN
  (SELECT max(empSalary) AS salary
   From Employee
   GROUP BY EmpDept)
4
ответ дан 29 November 2019 в 03:21
поделиться
Select empname,empid,Sal,DeptName from 
(Select e.empname,e.empid,Max(S.Salary) Sal,D.DeptName, ROW_NUMBER() Over(partition by D.DeptName order by s.salary desc) Rownum
from emp e inner join Sal S
on e.empid=s.empid 
inner join Dept d on e.Deptid=d.Deptid
group by e.empname,e.empid,D.DeptName,s.Salary
) x where Rownum = 1
5
ответ дан 29 November 2019 в 03:21
поделиться