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

MySQL如何基于不同WHERE条件实现SELECT多列聚合统计

实现方法

要在同一条分组查询里输出不同筛选条件的独立统计列,用条件聚合即可,不需要拆分多条查询。
你原来的写法把org_role = 9写在了全局WHERE里,这个条件会过滤掉所有org_role不等于9的记录,自然没法统计org_role=7的数值,只需要把差异化的统计条件放到聚合函数内部,公共筛选条件留在WHERE中即可。
修改后的可直接运行的语句如下:

SELECT
  org_id,
  COUNT(CASE WHEN org_role = 9 THEN 1 END) AS total,
  COUNT(CASE WHEN org_role = 7 THEN 1 END) AS total2
FROM organization
WHERE org_id = 10
GROUP BY org_id;

逻辑说明

  • 全局WHERE只保留公共过滤规则org_id = 10,先把对应机构的所有角色记录捞出来,避免多余的数据扫描
  • 聚合函数内用CASE做分支判断:符合对应统计规则时返回非空值,不符合时返回NULL,COUNT函数会自动跳过NULL值,最终得到的计数就是对应条件下的记录总数
  • 如果你使用的是MySQL,还可以用更简洁的简写写法,执行效果完全一致:
SELECT
  org_id,
  SUM(org_role = 9) AS total,
  SUM(org_role = 7) AS total2
FROM organization
WHERE org_id = 10
GROUP BY org_id;

这个写法利用了MySQL中布尔判断成立返回1、不成立返回0的特性,直接求和就能得到对应条件的记录数。

避坑提醒:不要在全局WHERE中同时写org_role = 9和org_role = 7的条件,两个条件互斥会导致查询返回空结果,所有和具体统计列绑定的筛选规则都要放在聚合函数内部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:54:25