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

SQL如何统计每个userId的各actionType数量并按类型分列展示

按用户分组统计各操作类型次数(行转列实现)

需求说明

  • 基于history表按userId维度分组统计
  • 计算每个用户ID下ban、unban、mute、unmute四类操作的总触发次数
  • 最终结果将四类操作类型分别作为独立列输出

关联表结构

题目给出的history表建表语句如下:

CREATE TABLE history (
    userId VARCHAR(40),
    actionType ENUM('ban', 'unban', 'mute', 'unmute')
);

实现SQL

由于actionType是固定的4个枚举值,用条件聚合实现即可,该写法跨数据库兼容性强,适配MySQL、PostgreSQL、Oracle等绝大多数主流数据库:

SELECT
    userId,
    SUM(CASE WHEN actionType = 'ban' THEN 1 ELSE 0 END) AS ban_count,
    SUM(CASE WHEN actionType = 'unban' THEN 1 ELSE 0 END) AS unban_count,
    SUM(CASE WHEN actionType = 'mute' THEN 1 ELSE 0 END) AS mute_count,
    SUM(CASE WHEN actionType = 'unmute' THEN 1 ELSE 0 END) AS unmute_count
FROM history
GROUP BY userId;

注意事项

  • 如果使用MySQL环境,可替换为更简洁的IF语法,统计效果完全一致,示例写法:SUM(IF(actionType = 'ban', 1, 0)) AS ban_count
  • 上述逻辑中,如果某个用户没有对应类型的操作,对应统计列会返回0,不会出现NULL值
  • 部分数据库提供了PIVOT专用行转列语法,但条件聚合的写法不需要适配数据库方言,通用性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:54:37