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

请求验证基于percentile_disc的Snowflake SQL查询合理性

你的Snowflake查询问题修正与验证

原查询存在的问题

  • 字段笔误:sum (different charges)是明显的错误写法,应该替换为对应费用字段(比如sum(TotalCharges),具体取决于你的业务需求)
  • 百分位数逻辑无效:你先按sex和PrincipalDiagnosis分组求和,每个分组仅剩下一条totalcharges数据,此时计算百分位数(比如中位数)没有统计意义,无法描述分布特征
  • 语法错误:partition by sex, PrincipalDiagnosis,末尾多了一个逗号,会直接导致查询报错
  • 结果不符合需求:最终输出仅包含分组字段和总费用,没有体现需求要求的百分位数指标,无法完成“用百分位数描述分布”的目标

修正后的查询(符合需求版本)

如果需求是分析每个诊断+性别分组下,单条记录的TotalCharges分布,可以用以下查询:

WITH charge_distribution AS (
    SELECT
        sex,
        PrincipalDiagnosis,
        TotalCharges,
        -- 计算中位数(50分位数)
        PERCENTILE_DISC(0.50) WITHIN GROUP (ORDER BY TotalCharges ASC) OVER (PARTITION BY sex, PrincipalDiagnosis) AS median_charge,
        -- 补充25/75分位数,更全面描述分布
        PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY TotalCharges ASC) OVER (PARTITION BY sex, PrincipalDiagnosis) AS p25_charge,
        PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY TotalCharges ASC) OVER (PARTITION BY sex, PrincipalDiagnosis) AS p75_charge
    FROM dataset
)
SELECT
    sex,
    PrincipalDiagnosis,
    median_charge,
    p25_charge,
    p75_charge,
    MIN(TotalCharges) AS min_charge,
    MAX(TotalCharges) AS max_charge
FROM charge_distribution
GROUP BY sex, PrincipalDiagnosis, median_charge, p25_charge, p75_charge
ORDER BY sex, PrincipalDiagnosis;

说明

这个查询基于原始的TotalCharges记录,按sex和PrincipalDiagnosis分组计算核心百分位数(25、50、75分位数),同时补充了最小/最大费用,能完整描述每个分组的费用分布特征。如果你的实际需求是先聚合每个分组的总收费,再分析这些总收费的分布,可以调整逻辑,但这种场景相对少见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:25:04