Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中按聚合函数max分组_Mysql_Sql_Group By_Max - Fatal编程技术网

MySQL中按聚合函数max分组

MySQL中按聚合函数max分组,mysql,sql,group-by,max,Mysql,Sql,Group By,Max,我有如下表格指导: +-------+------------+------------+----------+ |ID |姓名|部门|姓名|工资| +-------+------------+------------+----------+ |10101斯里尼瓦桑公司。Sci.|65000.00 | |12121 |吴|金融| 90000.00| |15151 |莫扎特|音乐| 40000.00| |22222 |爱因斯坦|物理学| 95000.00| |32343 | El Said |历史

我有如下表格指导:

+-------+------------+------------+----------+
|ID |姓名|部门|姓名|工资|
+-------+------------+------------+----------+
|10101斯里尼瓦桑公司。Sci.|65000.00 |
|12121 |吴|金融| 90000.00|
|15151 |莫扎特|音乐| 40000.00|
|22222 |爱因斯坦|物理学| 95000.00|
|32343 | El Said |历史| 60000.00|
|33456 |黄金|物理| 87000.00|
|45565卡茨公司。Sci.|75000.00 |
|58583 |加州|历史| 62000.00|
|76543 |辛格|金融| 80000.00|
|76766 |克里克|生物学| 72000.00|
|83821勃兰特公司。Sci.|92000.00 |
|98345 |金|电气工程| 80000.00|
+-------+------------+------------+----------+
询问

按部门名称从讲师组中选择部门名称、最高工资;
将给我讲师中每个部门的最高工资


但是,我希望得到结果中的所有列,也就是每个部门中薪酬最高的讲师的ID和姓名。但我不知道该怎么做。

您可以将当前查询用作子查询,以过滤原始表:

SELECT i1.*
FROM instructor i1
INNER JOIN
(
    SELECT dept_name, MAX(salary) AS salary
    FROM instructor
    GROUP BY dept_name
) i2
    ON i1.dept_name = i2.dept_name AND i1.salary = i2.salary;

请使用以下查询:

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

还可以使用相关子查询

select t.* from instructor  t
 where salary in
  ( 
    select  max(salary) from instructor t1 
    where t1.dept_name=t.dept_name
    group by t1.dept_name 
   )

您可以使用相关子查询:

select i.*
from instructor i
where salary = (select max(i1.salary)
                from instructor i1
                where i1.dept_name = i.dept_name
               );

这类问题在SO中已被多次回答。如果你搜索最好的分组mysql,你会得到很多例子。@Giorgosbetos的人们正在用。但是,在我看来,公认的答案是糟糕的,你真的需要向下滚动一段时间才能找到看起来不错的东西。
select i.*
from instructor i
where salary = (select max(i1.salary)
                from instructor i1
                where i1.dept_name = i.dept_name
               );