как найти максимальную зарплату сотрудникам в конкретном отделе - PullRequest
0 голосов
/ 19 июня 2019

У меня есть таблица с именем SalaryTable, содержащая зарплату сотрудника в различных отделах:

dept_id    name   salary
12          a      100
13          b      200
12          c      300
14          d      400
12          e      500
13          f      600

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

Я использую следующий SQL-запрос для этого

select dept_id, name, max(salary)
from SalaryTable
group by salary

Но приведенный выше код дает мне ошибку: dept_id must be an aggregate expression or appear in GROUP BY clause

Я могу получить следующую таблицулегко с этим запросом ниже:

select dept_id, max(salary) as max_salary
from SalaryTable
group by salary 

dept_id          max_salary
12                  500
13                  600
14                  400

но мне также нужно имя этого человека как:
ТРЕБУЕМЫЙ ВЫХОД

dept_id     name     max_salary
12           e       500
13           f       600
14           d       400

Ответы [ 4 ]

2 голосов
/ 19 июня 2019

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

select dept_id, max(salary)
from SalaryTable
group by dept_id;

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

select st.*
from SalaryTable st join
     (select dept_id, max(salary) as max_salary
      from SalaryTable
      group by dept_id
     ) std
     on st.dept_id = std.dept_id and
        st.salary = std.max_salary
1 голос
/ 19 июня 2019

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

select dept_id, name, salary
from SalaryTable a 
   where salary =(select max(salary) from SalaryTable b where a.dept_id=b.dept_id)
0 голосов
/ 19 июня 2019

Вы можете сделать это с NOT EXISTS:

select s.* from SalaryTable s
where not exists (
  select 1 from SalaryTable 
  where dept_id = s.dept_id and salary > s.salary
)
order by s.dept_id

См. Демоверсию .Результаты:

> dept_id | name | salary
> ------: | :--- | -----:
>      12 | e    |    500
>      13 | f    |    600
>      14 | d    |    400
0 голосов
/ 19 июня 2019

А точнее:

SELECT dept_id, NAME, salary FROM SalaryTable a 
WHERE salary =(SELECT MAX(salary) FROM SalaryTable b WHERE a.dept_id=b.dept_id) 
ORDER BY dept_id;

Также см. Try by joins, потому что см. this

Помните: Что бы вы ни указали между select и from в одном выражении sql, которое должно использоваться в предложении group by (Это то, что говорит ваша ошибка!).

...