mysql中聚合函数max的sql分组

yuvru6vn  于 2021-06-20  发布在  Mysql
关注(0)|答案(5)|浏览(446)

我有如下表格:

  1. +-------+------------+------------+----------+
  2. | ID | name | dept_name | salary |
  3. +-------+------------+------------+----------+
  4. | 10101 | Srinivasan | Comp. Sci. | 65000.00 |
  5. | 12121 | Wu | Finance | 90000.00 |
  6. | 15151 | Mozart | Music | 40000.00 |
  7. | 22222 | Einstein | Physics | 95000.00 |
  8. | 32343 | El Said | History | 60000.00 |
  9. | 33456 | Gold | Physics | 87000.00 |
  10. | 45565 | Katz | Comp. Sci. | 75000.00 |
  11. | 58583 | Califieri | History | 62000.00 |
  12. | 76543 | Singh | Finance | 80000.00 |
  13. | 76766 | Crick | Biology | 72000.00 |
  14. | 83821 | Brandt | Comp. Sci. | 92000.00 |
  15. | 98345 | Kim | Elec. Eng. | 80000.00 |
  16. +-------+------------+------------+----------+

查询

  1. select dept_name, max(salary) from instructor group by dept_name;

会给我教员每个部门的最高工资。
但是,我想得到结果中的所有列,也就是每个部门中工资最高的讲师的id和姓名。但我不知道该怎么做。

8aqjt8rx

8aqjt8rx1#

可以将当前查询用作筛选原始表的子查询:

  1. SELECT i1.*
  2. FROM instructor i1
  3. INNER JOIN
  4. (
  5. SELECT dept_name, MAX(salary) AS salary
  6. FROM instructor
  7. GROUP BY dept_name
  8. ) i2
  9. ON i1.dept_name = i2.dept_name AND i1.salary = i2.salary;
czq61nw1

czq61nw12#

可以使用相关子查询:

  1. select i.*
  2. from instructor i
  3. where salary = (select max(i1.salary)
  4. from instructor i1
  5. where i1.dept_name = i.dept_name
  6. );
vxbzzdmp

vxbzzdmp3#

也可以使用相关子查询

  1. select t.* from instructor t
  2. where salary in
  3. (
  4. select max(salary) from instructor t1
  5. where t1.dept_name=t.dept_name
  6. group by t1.dept_name
  7. )

http://sqlfiddle.com/#!9/f7018c/1号楼

v440hwme

v440hwme4#

请使用以下查询:

  1. SELECT ID, name, dept_name, salary
  2. FROM( select ID, name, dept_name, salary, ROW_NUMBER() OVER(PARTITION BY dept_name ORDER BY salary DESC) as ranks
  3. from instructor)T
  4. WHERE ranks = 1
c2e8gylq

c2e8gylq5#

  1. SELECT ins.id , ins.name
  2. FROM instructor ins
  3. inner join (
  4. SELECT ins2.id as id , MAX(ins2.salary) as salary
  5. FROM instructor ins2
  6. group by ins2.id
  7. ) as insG
  8. ON ins.id = insG.id AND ins.salary = insG.salary

相关问题