SQL如何从多组记录中筛选对应Number字段全部为Null的分组数据
SQL查询实现:筛选分组内指定字段全为NULL的分组
原始表结构与数据
| Name | Number |
|---|---|
| A | 1 |
| A | NULL |
| A | 2 |
| B | NULL |
| B | NULL |
预期输出
| Name | Number |
|---|---|
| B | NULL |
需求说明
筛选出所有Number字段取值全部为NULL的Name分组,每个符合条件的分组仅返回一条记录即可。
标准SQL实现(适配MySQL、PostgreSQL、SQL Server、Oracle等绝大多数主流数据库)
SELECT Name, MAX(Number) AS Number FROM 替换为你的表名 GROUP BY Name HAVING COUNT(Number) = 0;
逻辑说明
COUNT(字段名)计数时会自动忽略NULL值,若某个Name分组下所有Number都是NULL,计数结果就为0MAX(Number)对全为NULL的分组返回结果就是NULL,刚好匹配预期输出的Number字段值- 若仅需要返回
Name字段不需要返回Number,可简化为SELECT Name FROM 替换为你的表名 GROUP BY Name HAVING COUNT(Number) = 0
可选实现(更适配复杂筛选场景)
SELECT DISTINCT t1.Name, NULL AS Number FROM 替换为你的表名 t1 WHERE NOT EXISTS ( SELECT 1 FROM 替换为你的表名 t2 WHERE t2.Name = t1.Name AND t2.Number IS NOT NULL );
内容的提问来源于stack exchange,提问作者hp5110
相关产品推荐
相关产品推荐

