MySQL单SQL语句实现多条件双COUNT统计求助
修复后的员工统计SQL方案
嘿,我明白你在尝试统计员工对应两类客户数据时遇到了语法问题——原SQL里的COUNT结合CASE的写法不符合MySQL的语法规范,咱们来把它修正过来,同时满足你的统计需求:
核心问题分析
你原语句里的COUNT(distinct clients.retailer_ID when clients.progress_ID = 6)和COUNT(distinct case when clients.progress_ID = 7)都是语法错误的:
- MySQL要求
CASE语句必须有完整的CASE WHEN ... THEN ... END结构 - 要实现条件计数,需要让符合条件的返回要统计的字段,不符合的返回
NULL(COUNT会自动忽略NULL值)
修正后的完整SQL语句
SELECT employees.employees_ID, employees.name, employees.country_count_ID, employees.department_ID, employees.initials, country.country_initials, -- 统计progress_ID=6的distinct retailer_ID数量 COUNT(DISTINCT CASE WHEN clients.progress_ID = 6 THEN clients.retailer_ID END) AS aRows, -- 统计progress_ID=7的distinct retailer_ID数量 COUNT(DISTINCT CASE WHEN clients.progress_ID = 7 THEN clients.retailer_ID END) AS bRows FROM employees LEFT OUTER JOIN clients ON employees.employees_ID = clients.sales_employees_ID LEFT OUTER JOIN country ON employees.country_count_ID = country.count_ID WHERE employees.department_ID = 1 GROUP BY employees.employees_ID, employees.name, employees.country_count_ID, employees.department_ID, employees.initials, country.country_initials;
关键改动说明
- 给两个
CASE语句补全了THEN和END:当progress_ID符合条件时,返回clients.retailer_ID,否则返回默认的NULL - 保留了
DISTINCT关键字,确保每个唯一的retailer_ID只被统计一次,和你需求中的去重计数匹配 - 保持了你原有的表关联逻辑和分组规则,确保结果集的维度和你预期一致
这样修改后,MySQL就能正确识别语句,并且输出你需要的aRows和bRows两个统计列啦~
内容的提问来源于stack exchange,提问作者Malin Torstensen
相关产品推荐
相关产品推荐

