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

MySQL 8如何在同一行展示各type的closed计数与分组总计数

MySQL 8 单语句实现分组多维度统计

别搞两个子查询再通过type关联那套,写法繁琐性能还差,直接用条件聚合就行,单次遍历表就能出结果,简单高效。

实现思路

按type字段分组后,两个统计指标可以在分组内分别计算:

  • 类型总物品数:直接用COUNT(id)统计分组内的所有有效记录
  • 已关闭物品数:用CASE表达式做判断,只有当status=3时才返回id,其余情况返回NULL,COUNT函数会自动忽略NULL值,直接得到已关闭物品的数量;如果某个分组下没有已关闭物品,统计结果会自然返回0,不需要额外做空值兼容。

参考SQL

将代码中的your_table替换为你实际使用的表名即可执行:

SELECT
  type AS Type,
  COUNT(CASE WHEN status = 3 THEN id END) AS closed,
  COUNT(id) AS total
FROM your_table
GROUP BY type
ORDER BY type;

结果说明

基于你提供的测试数据集执行上述SQL,得到的结果和你预期的结构完全一致:

Typeclosedtotal
113
202
301
422

你附上的预期结果中type=4的统计值和给出的测试数据不匹配:测试数据内type=4共有2条status=3的记录,实际执行时统计结果以数据库内真实数据为准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:24:25