MySQL Group By和Skip Grouping on Null Values

问题描述 投票:6回答:3
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)

mysql sql null group-by skip
3个回答
8
投票

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

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

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

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

GROUP BY不为空时,0中的第二个表达式返回一个常量值collection_id。但是当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())

1
投票

试试这个:

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

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

请参阅SQL Fiddle中的示例。


-1
投票

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

MySQL SELECT only not null values

© www.soinside.com 2019 - 2024. All rights reserved.