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

SQL实现按单字段分组 统计另一字段不同值的分类计数

解决方案

这类分组后按字段不同取值在同一行输出多列计数的需求,用条件聚合实现即可,不需要联合usr_id分组,也不需要做表关联,执行效率很高。
直接运行下面的SQL就能得到你要的结果:

SELECT
    ts,
    COUNT(CASE WHEN usr_id = 'A' THEN 1 END) AS `A的计数`,
    COUNT(CASE WHEN usr_id = 'B' THEN 1 END) AS `B的计数`,
    COUNT(CASE WHEN usr_id NOT IN ('A', 'B') THEN 1 END) AS `其他用户的计数`
FROM myTable
GROUP BY ts;

实现逻辑说明

  • 分组维度只保留ts即可,和你之前联合usr_id分组的逻辑区别是,我们不把usr_id作为分组依据,而是在聚合函数内部逐行判断usr_id的取值:
    • 统计A的计数时,只有usr_id等于'A'的记录才会被COUNT统计到,不符合条件的记录会返回NULL,COUNT会自动忽略NULL值
    • 统计B的计数逻辑和A一致
    • 统计其他用户计数时,把usr_id既不是A也不是B的记录纳入统计即可
  • 这个写法是标准SQL语法,在所有支持SQL标准的数据库(MySQL、PostgreSQL、SQL Server等)都能正常运行,返回结果和你给出的预期完全一致。

如果你使用的是MySQL,还可以用更简洁的写法,因为MySQL中布尔判断的结果是1(成立)和0(不成立),直接用SUM求和就能得到对应计数,效果和上面的写法完全等价:

SELECT
    ts,
    SUM(usr_id = 'A') AS `A的计数`,
    SUM(usr_id = 'B') AS `B的计数`,
    SUM(usr_id NOT IN ('A', 'B')) AS `其他用户的计数`
FROM myTable
GROUP BY ts;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:42:18