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

Snowflake中使用SQL统计多列值出现次数并转置表输出

Snowflake SQL实现方案

以下两种方案都可以满足需求,你可以根据自己的使用习惯选择:

方案1:UNPIVOT + PIVOT 实现(扩展性更好)

适合后续Conf系列列有新增的场景,修改成本低:

-- 先生成完整的置信度取值维度表,确保所有6种取值都出现在结果中
WITH ALL_CONF_VALUES AS (
    SELECT COLUMN_VALUE AS Confidence
    FROM TABLE(FLATTEN(input => ARRAY_CONSTRUCT('Perfect','High','Medium','Low','No Match','Review')))
),
-- 把原表5个Conf列转成行维度,统计每个取值的出现次数
UNPIVOTED_STATS AS (
    SELECT 
        Confidence,
        Conf_Column,
        COUNT(*) AS occur_cnt
    FROM 你的原表名 -- 替换为实际表名
    UNPIVOT (
        Confidence FOR Conf_Column IN (Conf_1, Conf_2, Conf_3, Conf_4, Conf_5)
    )
    GROUP BY Confidence, Conf_Column
)
-- 关联维度表并转置为最终输出格式
SELECT 
    a.Confidence,
    p."Conf_1" AS "Conf_1 Count",
    p."Conf_2" AS "Conf_2 Count",
    p."Conf_3" AS "Conf_3 Count",
    p."Conf_4" AS "Conf_4 Count",
    p."Conf_5" AS "Conf_5 Count"
FROM ALL_CONF_VALUES a
LEFT JOIN UNPIVOTED_STATS u
    ON a.Confidence = u.Confidence
PIVOT (
    MAX(occur_cnt) 
    FOR Conf_Column IN ('Conf_1' AS "Conf_1", 'Conf_2' AS "Conf_2", 'Conf_3' AS "Conf_3", 'Conf_4' AS "Conf_4", 'Conf_5' AS "Conf_5")
) p
-- 按常规取值顺序排序
ORDER BY 
    CASE a.Confidence 
        WHEN 'Perfect' THEN 1
        WHEN 'High' THEN 2
        WHEN 'Medium' THEN 3
        WHEN 'Low' THEN 4
        WHEN 'No Match' THEN 5
        WHEN 'Review' THEN 6
    END;

说明

如果无匹配的位置想要显示0而非NULL,把SELECT部分的p."Conf_1"替换为IFNULL(p."Conf_1", 0)即可。

方案2:手动聚合实现(逻辑更直观)

不需要理解UNPIVOT/PIVOT语法也能直接修改使用:

WITH ALL_CONF_VALUES AS (
    SELECT COLUMN_VALUE AS Confidence
    FROM TABLE(FLATTEN(input => ARRAY_CONSTRUCT('Perfect','High','Medium','Low','No Match','Review')))
)
SELECT 
    a.Confidence,
    SUM(CASE WHEN t.Conf_1 = a.Confidence THEN 1 END) AS "Conf_1 Count",
    SUM(CASE WHEN t.Conf_2 = a.Confidence THEN 1 END) AS "Conf_2 Count",
    SUM(CASE WHEN t.Conf_3 = a.Confidence THEN 1 END) AS "Conf_3 Count",
    SUM(CASE WHEN t.Conf_4 = a.Confidence THEN 1 END) AS "Conf_4 Count",
    SUM(CASE WHEN t.Conf_5 = a.Confidence THEN 1 END) AS "Conf_5 Count"
FROM ALL_CONF_VALUES a
CROSS JOIN 你的原表名 t -- 替换为实际表名
GROUP BY a.Confidence
ORDER BY 
    CASE a.Confidence 
        WHEN 'Perfect' THEN 1
        WHEN 'High' THEN 2
        WHEN 'Medium' THEN 3
        WHEN 'Low' THEN 4
        WHEN 'No Match' THEN 5
        WHEN 'Review' THEN 6
    END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:18:01