Mysql里Having与max()连用时出现的问题

问题起因于leetcode上一道sql查询的题目:
“部门工资最高的员工”

+--------------+---------+
| 列名          | 类型    |
+--------------+---------+
| id           | int     |
| name         | varchar |
| salary       | int     |
| departmentId | int     |
+--------------+---------+
id是此表的主键列。
departmentId是Department表中ID的外键。
此表的每一行都表示员工的ID、姓名和工资。它还包含他们所在部门的ID+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
id是此表的主键列。
此表的每一行都表示一个部门的ID及其名称。

输入:
Employee:
+----+-------+--------+--------------+
| id | name  | salary | departmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+
Department:
+----+-------+
| id | name  |
+----+-------+
| 1  | IT    |
| 2  | Sales |
+----+-------+
输出:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
+------------+----------+--------+
解释:MaxJimIT 部门的工资都是最高的,Henry 在销售部的工资最高。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/department-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我写的SQL(错误答案,不合符这道SQL题的解法):

select 
	d.name as Departmentm, e.name as Employee, e.salary as Salary 
	from Employee e left join Department as d on e.departmentId=d.id 
	group by e.departmentId 
	having e.salary=max(e.salary);

自己依照题意建了两张表,表信息如下:
在这里插入图片描述在这里插入图片描述
查询出来的结果:
在这里插入图片描述
为什么会出现这种结果呢?因为sql语句中使用group by分组之后,再在having中拿e.salary来比较时。默认拿的是Employee表id为1和3的这两条记录来比较,其中Employee.id=1的记录,salary为7000,Employee.id=3的记录,salary为8000,所以只查出来了Employee.id=3的记录。
为了验证一下这个说法对不对,我把Employee.id=3这条记录的salary给改为6000,Employee.id=4这条记录的salary改位8000,再查询一下试试。
修改后的Employee表
在这里插入图片描述
查询结果:
在这里插入图片描述
由此可见,验证成功。
更详细的原因以后再了解清楚了再说明,这里先埋个坑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值