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

MySQL使用GROUP BY和CASE语句未获预期统计结果求助

问题解决:GROUP BY与CASE语句实现权限统计行合并

问题根源

你的SQL出现多行拆分和null值的问题,原因有两点:

  1. GROUP BY子句同时包含db.title和da.type,导致每个title会按权限类型(VIEW/EDIT)拆分成独立行
  2. CASE语句未正确结合聚合逻辑,仅在匹配对应type时返回统计值,其余场景直接返回null

修正后的SQL语句

SELECT
  db.title,
  COUNT(CASE WHEN da.type = 'VIEW' THEN da.user_id END) AS ViewersCount,
  COUNT(CASE WHEN da.type = 'EDIT' THEN da.user_id END) AS EditorsCount
FROM dashboard db 
LEFT JOIN dashboard_access da 
  ON db.id = da.dashboard_id
GROUP BY db.title;

逻辑说明

  • GROUP BY仅保留db.title:确保每个dashboard title只生成一行结果
  • COUNT结合CASE:CASE仅在权限类型匹配时返回user_id,否则返回null;COUNT会自动忽略null值,精准统计对应权限的用户数量
  • 保留LEFT JOIN:如果存在无任何权限记录的dashboard,依然会显示title,对应统计值为0(COUNT对全null场景返回0)

等价写法(使用SUM)

如果更习惯用SUM统计,也可以这样写:

SELECT
  db.title,
  SUM(CASE WHEN da.type = 'VIEW' THEN 1 ELSE 0 END) AS ViewersCount,
  SUM(CASE WHEN da.type = 'EDIT' THEN 1 ELSE 0 END) AS EditorsCount
FROM dashboard db 
LEFT JOIN dashboard_access da 
  ON db.id = da.dashboard_id
GROUP BY db.title;

两种写法都能得到你预期的结果:

titleViewersCountEditorsCount
Recog66
Mile42

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:17:04