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

MySQL如何使用COUNT()统计不同status值并输出为多列结果

优化方案:使用条件聚合单次查询完成统计

你可以通过条件聚合的方式实现需求,仅需一次查询就能得到符合要求的结果,比你现在用三次单独查询的方案性能更高,也不需要额外处理结果拼接的问题。

通用写法(兼容所有主流数据库)

SELECT 
  username,
  COUNT(CASE WHEN status = 'steady' THEN 1 END) AS steady,
  COUNT(CASE WHEN status = 'ready' THEN 1 END) AS ready,
  COUNT(CASE WHEN status = 'go' THEN 1 END) AS go
FROM users
GROUP BY username;

逻辑说明

  1. 先通过GROUP BY username将所有记录按用户名分组,每个用户的所有记录归为同一组
  2. 每组内通过CASE WHEN判断每行的status是否匹配对应状态,匹配则返回1,不匹配返回NULL
  3. COUNT函数统计时会自动忽略NULL值,最终就能得到每个用户各状态的记录数,无对应状态的用户会自动返回0,不需要额外补值

MySQL简化写法

如果你用的是MySQL数据库,可以用IF函数简化语法:

SELECT 
  username,
  SUM(IF(status = 'steady', 1, 0)) AS steady,
  SUM(IF(status = 'ready', 1, 0)) AS ready,
  SUM(IF(status = 'go', 1, 0)) AS go
FROM users
GROUP BY username;

方案优势

  • 仅需要扫描一次users表,数据量越大性能优势越明显,远优于三次单独查询的方案
  • 直接输出你需要的宽表结构,不需要额外拼接三次查询的结果
  • 不会遗漏无对应状态的用户,不需要手动补0处理,避免逻辑漏洞

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:15:03