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

SQLite中转置查询结果按性别统计event_type列数值的实现方法

SQLite 3.39.0以下版本不支持LATERAL JOIN与PostgreSQL风格的FILTER聚合语法,可使用UNION ALL列转行+条件聚合的通用方案实现需求,兼容所有SQLite版本:

SELECT 
    event_name,
    SUM(CASE WHEN sex = 'm' THEN 1 ELSE 0 END) AS m,
    SUM(CASE WHEN sex = 'f' THEN 1 ELSE 0 END) AS f
FROM (
    SELECT 'event_type_1' AS event_name, sex, event_type_1 AS val FROM d
    UNION ALL
    SELECT 'event_type_2' AS event_name, sex, event_type_2 AS val FROM d
) t
WHERE val = 1
GROUP BY event_name;

上述逻辑和你之前PostgreSQL版本的实现逻辑完全等价:内层通过UNION ALL将原表的两个event列拆分为两行数据,每行对应一个事件类型的取值与关联的性别字段,过滤掉事件未触发(val=0)的记录后,外层通过条件聚合统计不同性别下各事件的触发次数。

如果你使用的是SQLite 3.39.0及以上版本,SQLite已原生支持FILTER语法,可以简化聚合部分的写法:

SELECT 
    event_name,
    COUNT(*) FILTER (WHERE sex = 'm') AS m,
    COUNT(*) FILTER (WHERE sex = 'f') AS f
FROM (
    SELECT 'event_type_1' AS event_name, sex, event_type_1 AS val FROM d
    UNION ALL
    SELECT 'event_type_2' AS event_name, sex, event_type_2 AS val FROM d
) t
WHERE val = 1
GROUP BY event_name;

内容的提问来源于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:45:03