SQL查询求助:按员工统计csa_taken=2的记录数
SQL统计问题:按员工统计csa_taken=2的记录数
原始数据表
假设你的表名为employeeCSA,数据如下:
id emp_id csa_taken 1 100 2 2 100 2 3 100 0 4 100 2 5 101 2 6 101 2 7 101 0 8 101 0
预期统计结果
你想要得到每个员工对应的csa_taken=2的记录数:
emp_id count_csa_taken 100 3 101 2
我尝试的查询(未成功)
Select count(employee_id) From $employeeCSA where csa_taken=2
正确的查询方案
作为SQL新手,你现在的问题主要有两个:一是没有按员工ID分组,你的查询只会返回所有符合条件的总记录数,而不是每个员工各自的数量;二是字段名不匹配(你用了employee_id,但表中实际是emp_id)。
这里给你两种可行的写法,第一种是最直接满足你需求的:
写法一(基础分组统计)
SELECT emp_id, COUNT(*) AS count_csa_taken FROM employeeCSA WHERE csa_taken = 2 GROUP BY emp_id;
语句说明:
COUNT(*):统计每个分组内的记录数,因为已经用WHERE过滤了csa_taken=2的记录,所以这就是每个员工对应的目标数量AS count_csa_taken:给统计列起一个和你预期结果一致的别名,方便阅读GROUP BY emp_id:核心!告诉SQL要按照员工ID来分组统计,把相同emp_id的记录归为一组计算数量
写法二(兼容无符合条件记录的情况)
如果之后你需要统计所有员工,哪怕某个员工没有csa_taken=2的记录也要显示0,可以用这种写法:
SELECT emp_id, COUNT(CASE WHEN csa_taken = 2 THEN 1 END) AS count_csa_taken FROM employeeCSA GROUP BY emp_id;
这个写法不需要WHERE子句,而是用CASE语句判断每条记录是否符合条件,符合的话计数,不符合则不计数,最终得到所有员工的统计结果。
内容的提问来源于stack exchange,提问作者Bhagwa Dhari
相关产品推荐
相关产品推荐

