【问题标题】:SQL count based on two columns基于两列的 SQL 计数
【发布时间】:2014-12-10 14:17:20
【问题描述】:
我有一个员工培训记录表 (TRAINREC)
在此表中,它包含他们的employ_ref 和Course_Ref。
我需要计算有多少人完成了所有 5 门可用的课程,有多少人完成了 4、3、2、1 和 0 门
这可能是他们多次完成同一课程的情况,因此在此表中同一课程会有多个条目,但仍应仅计为一个。
计算条目数(SQL Server)和计算有多少人完成了“x”门课程的最佳方法是什么。
【问题讨论】:
标签:
sql
sql-server-2008
count
distinct
multiple-columns
【解决方案1】:
假设你的员工主表是Employee,你需要做两个不同的统计,第一个是每个人完成了多少课程:
SELECT e.employ_ref,
Courses = COUNT(DISTINCT tr.Course_Ref)
FROM Employee AS e
LEFT JOIN TrainRec AS tr
ON tr.employ_ref = e.employ_ref
GROUP BY e.employ_ref;
使用DISTINCT 将确保每个不同的课程只计算每个员工一次。
然后你需要做一个单独的计数,对第一个查询中的Courses 列进行分组:
SELECT Courses,
Employees = COUNT(*)
FROM ( SELECT e.employ_ref,
Courses = COUNT(DISTINCT tr.Course_Ref)
FROM Employee AS e
LEFT JOIN TrainRec AS tr
ON tr.employ_ref = e.employ_ref
GROUP BY e.employ_ref
) AS t
GROUP BY Courses;