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

SQL按主键分组统计多列中数字3的出现次数问题

按主键分组统计多列中数字3出现次数的正确SQL写法

嘿,我来帮你搞定这个问题!首先得明确你的核心需求:按主键(PK)分组,统计指定多列里数字3的出现次数——可能是每个主键下所有列的3总次数,也可能是每列单独统计3的次数,我都给你梳理清楚。

场景1:主键唯一(每行对应一个主键)

如果你的主键在表中是唯一的,每行只有一个主键值,那我们只需要逐列判断是否等于3,把符合条件的列数加起来就行:

SELECT 
    pk_id, -- 替换成你的实际主键列名
    (
        CASE WHEN col1 = 3 THEN 1 ELSE 0 END +
        CASE WHEN col2 = 3 THEN 1 ELSE 0 END +
        CASE WHEN col3 = 3 THEN 1 ELSE 0 END
        -- 可以继续添加更多需要统计的列
    ) AS total_3_occurrences
FROM your_table; -- 替换成你的实际表名

场景2:主键不唯一(多行对应同一个主键)

如果同一个主键对应多行数据,那需要先计算每行的3出现次数,再按主键求和:

SELECT 
    pk_id,
    SUM(
        CASE WHEN col1 = 3 THEN 1 ELSE 0 END +
        CASE WHEN col2 = 3 THEN 1 ELSE 0 END +
        CASE WHEN col3 = 3 THEN 1 ELSE 0 END
    ) AS total_3_occurrences
FROM your_table
GROUP BY pk_id;

场景3:按主键分组,同时统计每列的3出现次数

要是你需要同时知道每个主键下每列各自有多少个3,以及总次数,可以这么写:

SELECT 
    pk_id,
    SUM(CASE WHEN col1 = 3 THEN 1 ELSE 0 END) AS col1_3_count,
    SUM(CASE WHEN col2 = 3 THEN 1 ELSE 0 END) AS col2_3_count,
    SUM(CASE WHEN col3 = 3 THEN 1 ELSE 0 END) AS col3_3_count,
    SUM(
        CASE WHEN col1 = 3 THEN 1 ELSE 0 END +
        CASE WHEN col2 = 3 THEN 1 ELSE 0 END +
        CASE WHEN col3 = 3 THEN 1 ELSE 0 END
    ) AS total_3_count
FROM your_table
GROUP BY pk_id;

常见错误点提醒

很多人会踩的坑是直接用COUNT(col1 = 3),这在大部分数据库里是行不通的——因为col1 = 3返回的是布尔值,COUNT会把所有非NULL的布尔值都算成1,不管是TRUE还是FALSE。所以必须用CASE语句把符合条件的转化为1,不符合的转化为0,再用SUM来统计数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:55