【Mysql】统计各个部门的工资记录数,给.....(关于为什么dept_name 不属于聚合键,依然可以直接多表连接)

统计各个部门的工资记录数

http://www.nowcoder.com/questionTerminal/6a62b6c0a7324350a6d9959fa7c21db3

题目描述:统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序。
代码:

select d.dept_no,d.dept_name,count(*) as sum
from (departments d join dept_emp de on d.dept_no=de.dept_no)
    join salaries s on de.emp_no=s.emp_no
group by d.dept_no
order by dept_no

为什么dept_name 不属于聚合键,依然可以直接多表连接。
根据我查找的资料官方解释是:当group by 后面跟上主键或者不为空唯一索引时,查询是有效的,因为此时的每一笔数据都具有唯一性。

Mysql官方网站对此的描述链接:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

对于这道题,我们能在用例输入栏里能看到(当你测试不通过时),dept_no是departments表的主键。
所以以上代码的结果具有唯一性。也就是说depat_name是对应dept_no的。

牛客题霸-SQL篇【Mysql】 文章被收录于专栏

少壮不努力,老大勤刷题

全部评论
为什么group by里没出现name,但是select里还可以选到name啊
1 回复 分享
发布于 2022-10-21 13:07 福建
dept_no是主键 唯一 且也是在group by中出现在的,但depat_name 后期如果有同名同姓的呢?
点赞 回复 分享
发布于 04-30 16:52 北京
你说这话跟阅读理解似的,“当group by 后面跟上主键或者不为空唯一索引时,查询是有效的”跟name有什么联系啊,没看明白
点赞 回复 分享
发布于 10-30 22:56 安徽

相关推荐

如题,字节跳动怎么才能看到自己的面评,找hr说看不到
SoulStar:自己应该看不到,这个是字节比较保密的信息,之前有mentor加我,说他能看到,但是不能给我说,给我说了他可能就要被辞退了
点赞 评论 收藏
分享
09-25 10:34
东北大学 Java
多面手的小八想要自然醒:所以读这么多年到头来成为时代车轮底下的一粒尘
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
47 4 评论
分享
牛客网
牛客企业服务