【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】 文章被收录于专栏
少壮不努力,老大勤刷题