请求验证基于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
相关产品推荐
相关产品推荐

