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

PostgreSQL分组时忽略Null值(仅当Null为唯一值时保留)的统计需求

解决方案

思路

先标记每个Column1对应的Column2是否全为null,再按规则筛选数据后分组统计:

  • 对每个Column1计算其非null的Column2行数,若行数为0则说明该Column1的Column2全为null
  • 筛选出Column2非null的行,或Column1全为null的行(保留这类行的null值)
  • 按Column2分组,统计去重后的Column1数量

通用SQL实现(支持窗口函数的数据库:MySQL 8.0+/PostgreSQL/SQL Server等)

WITH cte AS (
    SELECT 
        Column1,
        Column2,
        -- 统计每个Column1对应的非null Column2行数
        COUNT(Column2) OVER (PARTITION BY Column1) AS non_null_count
    FROM your_table
)
SELECT 
    Column2,
    COUNT(DISTINCT Column1) AS `Count Distinct Column1`
FROM cte
WHERE 
    Column2 IS NOT NULL 
    -- 只保留那些Column1全为null的行的null值
    OR non_null_count = 0
GROUP BY Column2;

兼容旧版本数据库的实现(无窗口函数)

SELECT 
    Column2,
    COUNT(DISTINCT Column1) AS `Count Distinct Column1`
FROM (
    SELECT 
        t1.Column1,
        t1.Column2,
        -- 子查询统计每个Column1的非null Column2行数
        (SELECT COUNT(Column2) FROM your_table t2 WHERE t2.Column1 = t1.Column1) AS non_null_count
    FROM your_table t1
) sub
WHERE 
    Column2 IS NOT NULL 
    OR non_null_count = 0
GROUP BY Column2;

结果验证

执行上述SQL后,会得到预期结果:

Column2Count Distinct Column1
x1
y1
(null)1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:16:05