求助:生成含空值的多列SQL频率报表(代码频次全为0)
跨多列数据频率报表SQL修正方案
问题根源
你的SQL代码存在两处逻辑错误,导致FREQ字段全为0:
- 冗余的
select distinct:GROUP BY TEST, PANEL, UNITS, LOINC已经会返回唯一的字段组合,添加distinct完全多余,甚至可能干扰分组逻辑 - 错误的计数函数:
count(distinct TEST, PANEL, UNITS, LOINC)在分组后,每个组内的字段组合是唯一的,部分SQL引擎不支持多列作为count(distinct)的参数,从而返回0;即使支持,结果也只会是1,无法统计真实频次
修正后的SQL代码
select TEST, PANEL, UNITS, LOINC, count(*) as FREQ from DEV_HEALTHTERM.SOURCE.LAB GROUP BY TEST, PANEL, UNITS, LOINC ORDER BY FREQ DESC;
空值处理说明
主流SQL引擎(如Snowflake、PostgreSQL、MySQL)在GROUP BY时会将字段值为NULL的行归为同一分组,这样就能正常统计包含空值的行的频次,满足你的需求。
内容的提问来源于stack exchange,提问作者HealthcareITSQL
相关产品推荐
相关产品推荐

