SQL26 汇总各个部门当前员工的title类型的分配数目

1. 题目

  • 题目来源:SQL26 汇总各个部门当前员工的title类型的分配数目

  • 题目描述
    汇总各个部门当前员工的title类型的分配数目,即结果给出部门编号dept_no、dept_name、其部门下所有的员工的title以及该类型title对应的数目count,结果按照dept_no升序排序,dept_no一样的再按title升序排序

  • 三张表
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  • 所需结果

    在这里插入图片描述

2. 题解

这题还是有些看头,有不少考察点(也有不少槽点)。

主要考察:
1、多表连接:使用 INNER JOIN 找到三张表格的所有匹配项
2、分区去重(分组):使用 GROUP BY对分区对象进行分组

这题坑就坑在题目有些迷惑性,而且底下很多人给的答案也有问题。

个人解答如下:

SELECT d.dept_no, 
       d.dept_name, 
       t.title, 
       COUNT(*) count
FROM  departments d
      JOIN dept_emp de
      ON d.dept_no = de.dept_no
      JOIN titles t
      ON de.emp_no = t.emp_no
WHERE de.to_date = '9999-01-01'      # 【在职员工】这个条件不能忘
      AND t.to_date = '9999-01-01'
GROUP BY d.dept_no, d.dept_name, t.title  # 易错:也要对 title 进行分组!!(题目描述很具迷惑性)
ORDER BY d.dept_no ASC, t.title ASC

上面说很坑的原因如下:
题目所求【汇总各个部门当前员工的title类型的分配数目】,一头雾水!可能出题人也知道表述不清,后面又加以解释:【即结果给出部门编号dept_no、dept_name、其部门下所有的员工的title以及该类型title对应的数目count】,到第二遍想了好久才明白 这个 title 的 count 究竟求的是个什么,其实就可以直接理解为emp_no,即”具体的员工号“,这样就不会出现很多人答案中的COUNT(title)了。既GROUP BY title,又COUNT(title),奇怪的很。

3. 反思:GROUP BY + JOIN

做这题耗费很多时间,值得终结一下:

1、关于GROUP BY 的使用技巧:

  • ① 要快速且要找准分组的对象,看到”各个“、”每一”等关键词要敏感
  • ② 对SELECT语句的限制,后面的字段要么是分组对象要么是聚合对象,其它多余字段不允许,因此反过来,可以根据这条,来确定分组对象
    2、关于JOIN的使用:
  • ① 注意在字段前在指定特定表格
  • ② 区分左右连接: t_a LEFT JOIN t_b 表示对 t_b 进行行过滤,然后再与t_a进行列合并;而 t_a INNER JOIN t_b是互相约束,最后再做列合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值