You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

关键改动说明

  1. 给两个CASE语句补全了THEN和END:当progress_ID符合条件时,返回clients.retailer_ID,否则返回默认的NULL
  2. 保留了DISTINCT关键字,确保每个唯一的retailer_ID只被统计一次,和你需求中的去重计数匹配
  3. 保持了你原有的表关联逻辑和分组规则,确保结果集的维度和你预期一致

这样修改后,MySQL就能正确识别语句,并且输出你需要的aRows和bRows两个统计列啦~

内容的提问来源于stack exchange,提问作者Malin Torstensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:36:35