Самая высокая зарплата в каждом отделе - PullRequest
21 голосов
/ 12 декабря 2011

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

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

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

Ответы [ 29 ]

1 голос
/ 04 июня 2016
select empno 
from EMP e 
where salary=(select max(sal) 
              from EMP w 
              where  groupby w.deptno having e.deptno=w.deptno)

Надеюсь, это сработает ...

1 голос
/ 12 декабря 2011

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

SELECT MAX(Salary) FROM TableName GROUP BY DeptID
1 голос
/ 28 сентября 2015
SELECT DeptID, MAX(Salary)
 FROM EmpDetails
GROUP BY DeptID

Этот запрос будет работать нормально, но тот момент, если вы захотите получить какие-то другие сведения, касающиеся сотрудника с самой высокой зарплатой, будет противоречить.Вы можете использовать:

SELECT DepatID, a , b, c
 FROM EmpDetails
 WHERE Salary IN (
    SELECT max(Salary)
      FROM EmpDetails
     GROUP BY DeptID
 );

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

1 голос
/ 23 апреля 2014

Вот способ получить максимальные значения и имена в любой версии SQL.

Тестовые данные:

CREATE TABLE EmpDetails(DeptID VARCHAR(10), EmpName VARCHAR(10), Salary DECIMAL(8,2))
INSERT INTO EmpDetails VALUES('Engg','Sam',1000)
INSERT INTO EmpDetails VALUES('Engg','Smith',2000)
INSERT INTO EmpDetails VALUES('HR','Denis',1500)
INSERT INTO EmpDetails VALUES('HR','Danny',3000)
INSERT INTO EmpDetails VALUES('IT','David',2000)
INSERT INTO EmpDetails VALUES('IT','John',3000)

Пример:

SELECT ed.DeptID
      ,ed.EmpName
      ,ed.Salary
FROM (SELECT DeptID, MAX(Salary) MaxSal
      FROM EmpDetails
      GROUP BY DeptID)AS empmaxsal
INNER JOIN EmpDetails ed
  ON empmaxsal.DeptID = ed.DeptID
 AND empmaxsal.MaxSal = ed.Salary

Несамый элегантный, но работает.

0 голосов
/ 16 апреля 2019
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 голосов
/ 28 мая 2017

В приведенном ниже запросе будет указана самая высокая зарплата в каждом отделе.

select deptname, max(salary) from department, employee where 
  department.deptno=employee.deptno group by deptname;

Я успешно выполнил этот запрос к базе данных Oracle.

0 голосов
/ 09 марта 2017

Если вам нужен отдел и самая высокая зарплата, используйте

SELECT DeptID, MAX(Salary) FROM EmpDetails GROUP BY DeptID

, если вы хотите больше столбцов в сотруднике и отделе, используйте

select  Department.Name , emp.Name, emp.Salary from Employee emp
inner join (select DeptID, max(salary) [salary] from employee group by DeptID) b
on emp.DeptID = b.DeptID and b.salary = emp.Salary
inner join Department on emp.DeptID = Department.id
order by Department.Name

, если используете зарплата в (выберитеmax (оклад ...)) вот так: один человек получит такую ​​же зарплату в другом отделе, тогда он потерпит неудачу.

0 голосов
/ 14 августа 2016
select * from (
    select a.* from EmpDetails a 
    right join (select DeptID,max(salary) as Salary from EmpDetails group by DeptID) b
    on b.DeptID=a.DeptID and b.salary=a.salary ) as c  group by c.DeptID;
0 голосов
/ 08 сентября 2015

Не уверен, почему никто не упомянул Group By .... Имея синтаксис.В нем конкретно рассматриваются эти требования.

select EmpName,DeptId,Salary from EmpDetails group by DeptId having Salary=max(Salary);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...