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

查询含空值的表:按Col1分组判断Col2全填充生成Col3的简便方法

无需额外嵌套表的简便实现方案

当然有啦!完全不用搞嵌套子查询或者创建额外表,用基础的聚合函数就能轻松实现需求,而且执行效率还很高,几乎所有主流SQL数据库(比如MySQL、PostgreSQL、SQL Server、Oracle)都支持。

给你两种常用的写法:

写法一:利用COUNT函数的特性

SELECT 
    Col1,
    CASE 
        WHEN COUNT(Col2) = COUNT(*) THEN 1 
        ELSE 0 
    END AS Col3
FROM tbl
GROUP BY Col1;

原理很简单:COUNT(Col2)只会统计Col2字段非空的记录数,而COUNT(*)会统计分组内的所有记录数。如果两者相等,说明这个分组里的Col2没有空值,返回1;反之只要有一个空值,两者就不相等,返回0。

写法二:结合CASE和MAX函数

SELECT 
    Col1,
    1 - MAX(CASE WHEN Col2 IS NULL THEN 1 ELSE 0 END) AS Col3
FROM tbl
GROUP BY Col1;

这个思路是:先通过CASE语句把空值标记为1,非空标记为0,然后用MAX取分组里的最大值——如果分组里有任何一个空值,MAX就会返回1,1减1得到0;如果全都是非空值,MAX返回0,1减0得到1,正好符合你的需求。

这两种写法都是单表扫描一次就完成计算,没有额外的嵌套或者临时表,非常简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:05:24