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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:02