我做错了什么?尝试输出两个COUNT并需要按部门分组。
SELECT Department,
COUNT(DISTINCT ID) AS total,
SUM(CASE WHEN course LIKE 'AS%' THEN 1
ELSE 0
END) AS Total_AS
FROM schedule
GROUP BY Department
ORDER BY Department ASC
唯一的问题是Total_As
为多个实例计算Department
。如果employee(ID)
至少接受过一次课程AS%
的培训,则需要计算一次。该脚本目前正在计算AS%
占用的每个employee(ID)
。需要case
部分仅计算employee(ID)
一次,以表明员工至少进行了一次AS%
培训,如果他们没有参加,则需要0。 SUM
不应该多次计算员工数。尝试使用MAX
代替SUM
,但结果仅为Department
提供了1或0。尝试在Department, Total Employees, # of Employees
中获得至少有Department
Course Like 'AS%'
的{{1}}输出。
输出应为:
会计,部门共20名员工,Total_AS 10。
使用当前SUM
,我得到Total_AS
为40的结果,因为Employees(ID)
中的10个每个都有4个课程。只需要Total_AS
COUNT
Employees
DateTime today = DateTime.Today;
至少参加过1个课程,在这种情况下为10个。
答案 0 :(得分:2)
将SUM更改为COUNT(DISTINCT):
SELECT Department,
COUNT(DISTINCT ID) AS total,
COUNT(DISTINCT CASE WHEN course LIKE 'AS%' THEN id END) Total_AS
FROM schedule
GROUP BY Department
ORDER BY Department ASC