You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时使用Count与Sum?实现员工证书数量统计并筛选

解决SQL分组统计的问题

我来帮你搞定这个统计需求!你现在的查询返回多条重复记录,核心问题出在GROUP BY的分组条件上。

原语句的问题

你在GROUP BY里同时指定了employee_bt.EMP_NUM和earnedrating_bt.RTG_CODE,这会让数据库按「单个员工+单个证书」的组合来分组,每个分组里只有一条证书记录,所以COUNT的结果自然都是1,没法汇总出每个员工的总证书数。另外,你还多关联了rating_bt表——如果只是统计证书数量,这个表完全不需要,反而会增加查询开销。

修正后的SQL语句

SELECT 
    CONCAT(employee_bt.EMP_FNAME, " ", employee_bt.EMP_LNAME) AS "Full Name",
    COUNT(earnedrating_bt.RTG_CODE) AS "Count of Rating"
FROM employee_bt
INNER JOIN earnedrating_bt ON earnedrating_bt.EMP_NUM = employee_bt.EMP_NUM
GROUP BY employee_bt.EMP_NUM, employee_bt.EMP_FNAME, employee_bt.EMP_LNAME
HAVING COUNT(earnedrating_bt.RTG_CODE) > 3
ORDER BY employee_bt.EMP_LNAME ASC;

关键调整说明

  • 简化分组条件:只按员工的唯一标识EMP_NUM以及姓名字段分组(有些数据库要求SELECT里的非聚合字段都要出现在GROUP BY里,所以加上姓名更稳妥),这样同一个员工的所有证书记录会被合并成一组,COUNT就能正确统计总数量。
  • 添加HAVING筛选:用HAVING COUNT(...) > 3来筛选出证书数量超过3的员工——注意不能用WHERE,因为WHERE是在分组前筛选记录,而HAVING是分组后筛选结果。
  • 移除不必要的关联:删掉了和rating_bt的JOIN,因为你不需要用到这个表的任何字段,简化查询逻辑。

执行这个语句后,就能得到你想要的结果:每个员工一行,显示全名和总证书数,且只保留证书数超过3的记录,比如Rhonda Lewis会显示4,John Lange显示3。

内容的提问来源于stack exchange,提问作者TigerInnerDragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:22:39