在一个查询中计数两次

时间:2015-06-15 20:14:33

标签: mysql sql

我做错了什么?尝试输出两个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个。

1 个答案:

答案 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