PostgreSQL ROLLUP分组时去除分组列空白值的解决方法
我正在将一条使用ROLLUP的SQL语句从Oracle迁移到PostgreSQL,整体执行结果正确,但分组列出现了一个空白值,我不清楚该如何去除。
我当前使用的语句如下:
SELECT COALESCE(CASE WHEN GROUPING(COUNTY) = 1 THEN 'TOTAL' else county::text END) as COUNTY ,COUNT(CASE WHEN STV_TO_GAS THEN 1 END) as STOVE_TO_GAS_SUM ,COUNT(CASE WHEN FIRE_TO_GAS THEN 1 END) as FIRE_TO_GAS_SUM ,COUNT(CASE WHEN PELLET_TO_GAS THEN 1 END) as PELLET_TO_GAS_SUM ,COUNT(CASE WHEN STV_TO_ELECTRIC THEN 1 END) as STOVE_TO_ELECTRIC_SUM ,COUNT(CASE WHEN FIRE_TO_ELECTRIC THEN 1 END) as FIRE_TO_ELECTRIC_SUM ,COUNT(CASE WHEN PELLET_TO_ELECTRIC THEN 1 END) as PELLET_TO_ELECTRIC_SUM ,COUNT(CASE WHEN MERIDIAN THEN 1 END) as WITHIN_MERIDIAN_SUM ,count(CASE WHEN hb357.stv_to_gas then 1 END) + count(CASE WHEN hb357.fire_to_gas then 1 END) + count(CASE WHEN hb357.pellet_to_gas then 1 END) + count(CASE WHEN hb357.stv_to_electric then 1 END) + count(CASE WHEN hb357.fire_to_electric then 1 END) + count(CASE WHEN hb357.pellet_to_electric then 1 END) + count(CASE WHEN hb357.meridian then 1 END ) AS county_totals FROM woodburn.HB357 WHERE app_status IN ('pending','approved') AND (COUNTY IS NOT NULL OR trim(COUNTY) <> '') GROUP BY rollup (county)
但执行上述语句后,county列仍然返回了一个空白值。
我也尝试将SELECT部分的第一个CASE语句修改为如下写法:
COALESCE(CASE WHEN GROUPING(COUNTY) = 1 THEN 'TOTAL' WHEN TRIM(COUNTY) != '' AND COUNTY IS NOT NULL then county END) as COUNTY
修改后county列会返回一行NULL值,问题仍然没有解决。
最终解决方案
尝试了所有建议的方案后,最终采用了Jorge Campos推荐的方案,最终可用的写法如下:
SELECT COALESCE(CASE WHEN GROUPING(COUNTY) = 1 THEN 'TOTAL' WHEN TRIM(COUNTY) != '' then county END) as COUNTY ,COUNT(CASE WHEN STV_TO_GAS THEN 1 END) as STOVE_TO_GAS_SUM ,COUNT(CASE WHEN FIRE_TO_GAS THEN 1 END) as FIRE_TO_GAS_SUM ,COUNT(CASE WHEN PELLET_TO_GAS THEN 1 END) as PELLET_TO_GAS_SUM ,COUNT(CASE WHEN STV_TO_ELECTRIC THEN 1 END) as STOVE_TO_ELECTRIC_SUM ,COUNT(CASE WHEN FIRE_TO_ELECTRIC THEN 1 END) as FIRE_TO_ELECTRIC_SUM ,COUNT(CASE WHEN PELLET_TO_ELECTRIC THEN 1 END) as PELLET_TO_ELECTRIC_SUM ,COUNT(CASE WHEN MERIDIAN THEN 1 END) as WITHIN_MERIDIAN_SUM ,count(CASE WHEN hb357.stv_to_gas then 1 END) + count(CASE WHEN hb357.fire_to_gas then 1 END) + count(CASE WHEN hb357.pellet_to_gas then 1 END) + count(CASE WHEN hb357.stv_to_electric then 1 END) + count(CASE WHEN hb357.fire_to_electric then 1 END) + count(CASE WHEN hb357.pellet_to_electric then 1 END) + count(CASE WHEN hb357.meridian then 1 END ) AS county_totals FROM woodburn.HB357 WHERE app_status IN ('pending','approved') AND COUNTY IS NOT NULL AND TRIM(COUNTY) != '' GROUP BY rollup (county)
内容的提问来源于stack exchange,提问作者reactFullStackDeveloper
相关产品推荐
相关产品推荐

