繁体   English   中英

MySQL Group By和Skip Grouping on Null Values

[英]MySQL Group By And Skip Grouping On Null Values

select * from dc_deal group by collection_id

在collection_id列中,我有值(1,3,3,4,4,5,NULL,NULL) 上面的查询将返回带有(1,2,3,4,NULL)的行,但我想跳过对NULL值的分组,需要结果如(1,2,3,4,NULL,NULL)

如果表中有一个唯一的列(或列集),那么我们可以向GROUP BY添加另一个表达式。

collection_id为null时,表达式需要为每一行返回唯一值。 否则,它返回一个常量。

假设我们在表中有一个唯一的id列,那么我们可以这样做:

... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)

collection_id不为null时, GROUP BY中的第二个表达式返回一个常量值0 但是当collection_id为null时,它会为每一行返回一个唯一值。

请注意,此处的id仅是对在表中定义为唯一的列的引用。 PRIMARY KEY是一个很好的候选人。 如果我们在单个列上没有唯一索引,那么我们可以为唯一约束中的每个列重复这种相同类型的表达式,或者对每行保证唯一的任何表达式重复。

... GROUP BY collection_id
           , IF(collection_id IS NULL, col1, '')
           , IF(collection_id IS NULL, col2, NULL)
           , IF(collection_id IS NULL, col3, collection_id)

或者,我们可以使用表达式生成唯一值:

... GROUP BY IFNULL(collection_id,UUID())

尝试这个:

SELECT * FROM dc_deal 
GROUP BY collection_id, 
case WHEN collection_id IS NULL THEN ID ELSE 0 END

ID替换为表中的另一列以进行分组。

请参阅SQL Fiddle中的示例。

尝试这个 :
select * from dc_deal其中collection_id不是由collection_id组成的NUll组

MySQL SELECT只是非空值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM