Самая высокая зарплата в каждом отделе - 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 ]

2 голосов
/ 29 ноября 2012
SELECT empname
FROM empdetails
WHERE salary IN(SELECT deptid max(salary) AS salary
FROM empdetails
group by deptid)
2 голосов
/ 12 декабря 2011

эмм, что-то вроде:

select 
   d.DeptID,
   max(e.Salary)
from
   department d
   inner join employees e on d.DeptID = e.DeptID
group by
  d.DeptID
2 голосов
/ 26 апреля 2015

Это наилучшее возможное решение для 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 голосов
/ 28 августа 2015

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

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 голосов
/ 04 марта 2016
***

> /*highest salary by each dept*/

***
select d.Dept_Name,max(e.salary)
    from emp_details as e join Dept_Details as d
    on e.d_id=d.Dept_Id
    group by  d.Dept_Name

select  distinct e.d_id,d.Dept_Name
    from emp_details as e join Dept_Details as d 
    on e.d_id=d.Dept_Id

select  e.salary,d.Dept_Name,d.Dept_Id
    from emp_details as e join Dept_Details as d 
    on e.d_id=d.Dept_Id

/////simplest query for max salary dept_wise////
2 голосов
/ 09 декабря 2015
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);
2 голосов
/ 07 октября 2015
SELECT
    DeptID,
    Salary
FROM
    EmpDetails
GROUP BY
    DeptID
ORDER BY
    Salary desc
1 голос
/ 28 мая 2017

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

with T as
(select empname, employee.deptno, salary
from employee
where salary in (select max(salary)
from employee
group by deptno))
select empname, deptname, salary
from T, department
where T.deptno=department.deptno;

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

1 голос
/ 21 марта 2017

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

SELECT DeptID, EmpName, Salary
FROM EmpDetails a
WHERE Salary = (SELECT MAX(Salary) 
                FROM EmpDetails b
                WHERE a.DeptID = b.DeptID)
1 голос
/ 12 февраля 2017
select deptid, empname, salary from
(Select deptid, empname,salary,
rank() Over(Partition by deptid  order by salary desc)as rank from 
EmpDetails) emp 
where emp.rank = 1

Сначала ранжирует каждого работника по зарплате в порядке убывания, имея наивысший ранг 1, а затем выбирает только deptid, empname, оклад. Вы можете сделать это для все N-й член группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...