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

SQL如何转置列结果,按性别统计event_type的对应数量?

实现思路

你需要分两步完成需求:

  1. 先做列转行(逆透视):把event_type_1、event_type_2两个列转成维度行,新增字段标注事件类型
  2. 再做行转列(透视):按事件类型分组,分别统计不同性别的触发次数总和
通用SQL实现(兼容所有主流数据库)
SELECT 
    event_name AS ``,
    SUM(CASE WHEN sex = 'm' THEN trigger_count ELSE 0 END) AS `m`,
    SUM(CASE WHEN sex = 'f' THEN trigger_count ELSE 0 END) AS `f`
FROM (
    -- 列转行:将两个事件列拆分为独立行
    SELECT sex, 'event_type_1' AS event_name, event_type_1 AS trigger_count FROM d
    UNION ALL
    SELECT sex, 'event_type_2' AS event_name, event_type_2 AS trigger_count FROM d
) AS event_unpivot
GROUP BY event_name
ORDER BY event_name;

执行上述代码即可得到你要求的输出结果。

支持UNPIVOT语法的数据库简化写法(SQL Server/Oracle适用)
SELECT 
    event_name AS ``,
    SUM(CASE WHEN sex = 'm' THEN trigger_count ELSE 0 END) AS `m`,
    SUM(CASE WHEN sex = 'f' THEN trigger_count ELSE 0 END) AS `f`
FROM d
UNPIVOT (
    trigger_count FOR event_name IN (event_type_1, event_type_2)
) AS unpivot_result
GROUP BY event_name
ORDER BY event_name;
原写法错误说明

你原来的查询是按event_type_1和event_type_2的组合值分组,统计的是不同事件触发组合的人数,和你需要的「单个事件按性别统计触发次数」的逻辑不符,因此得到的结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:06