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

如何在Snowflake中按国家分组计算FALSE/(FALSE+TRUE)行级结果?

按国家分组计算FALSE/(FALSE+TRUE)的Snowflake SQL实现

正确查询语句

SELECT
    t2.Country_Name,
    COUNT(CASE WHEN t1.Drink = FALSE THEN 1 END) AS F,
    COUNT(CASE WHEN t1.Drink = TRUE THEN 1 END) AS T,
    -- 避免除数为0的报错,无有效记录时返回NULL
    CASE 
        WHEN COUNT(CASE WHEN t1.Drink IN (TRUE, FALSE) THEN 1 END) = 0 THEN NULL
        ELSE COUNT(CASE WHEN t1.Drink = FALSE THEN 1 END) / COUNT(CASE WHEN t1.Drink IN (TRUE, FALSE) THEN 1 END)
    END AS total
FROM Table1 t1
LEFT JOIN Table2 t2 
    ON t2.Country_ID = t1.Country_ID
GROUP BY t2.Country_Name
-- 可选:过滤无有效Drink记录的国家
HAVING COUNT(CASE WHEN t1.Drink IN (TRUE, FALSE) THEN 1 END) > 0;

原查询问题说明

你之前用UNION的方式会把每个国家的FALSE、TRUE统计结果分成两行,无法在同一行内直接计算比例;另外GROUP BY已经保证了Country_Name的唯一性,语句中的DISTINCT属于多余操作。

关键逻辑解释

  1. 条件聚合:用CASE WHEN配合COUNT,在每个国家分组内分别统计Drink为FALSE和TRUE的记录数,COUNT会自动忽略NULL值,仅统计满足条件的行。
  2. 除数为0处理:通过CASE判断有效记录总数(TRUE+FALSE)是否为0,避免出现除以0的报错。
  3. 字段替换:如果要计算Food的比例,只需把语句中的Drink替换为Food即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:15:30