MySQL Group By和Skip Grouping on Null Values

Was*_* A. 6 mysql sql null group-by skip

select * from dc_deal group by collection_id
Run Code Online (Sandbox Code Playgroud)

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

spe*_*593 10

如果表中有唯一的列(或列集),则只需向GROUP BY添加另一个表达式即可.当GROUP BYnull为空时,表达式需要为每一行返回唯一值,否则返回一个常量.

假设collection_id表中有一个唯一的列,那么这样的事情:

... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Run Code Online (Sandbox Code Playgroud)

当collection_id不为null时,GROUP BY中的第二个表达式返回一个常量值,但当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)
Run Code Online (Sandbox Code Playgroud)

  • GROUP BY IFNULL(collection_id,UUID()) (2认同)