作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我做错了什么?试图输出两个 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)
至少接受过一次类(class) AS%
的培训,则只需要计算一次。该脚本目前正在计算被 employee(ID)
占用的每个 AS%
。需要 case
部分只对 employee(ID)
计数一次,以表明该员工至少参加过一次 AS%
培训,如果参加过则为 0没有参与。 SUM
不应多次对员工进行计数。尝试使用 MAX
代替 SUM
,但结果只为每个 Department
提供 1 或 0。尝试获取 Department
中至少有 1 个 Course Like 'AS%'
的 Department、Total Employees、# of Employees
的输出。
输出应该是:
Accounting, Total of 20 employees in Department, Total_AS 10.
使用当前的 SUM
,我得到 Total_AS
的结果为 40,因为 Employees(ID)
中有 10 人每人选修了 4 门类(class)。只需要 Total_AS
为 COUNT
的 Employees
至少参加了 1 门类(class),在本例中为 10。
最佳答案
将 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
关于mysql - 在一次查询中计数两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854202/
我是一名优秀的程序员,十分优秀!