MySQL Group By和跳过对空值的分组

select * from dc_deal group by collection_id

在collection_id列中,我有 。上面的查询将返回带有

行,但是我想跳过对NULL值的分组,并且需要类似

回答:

如果表中有一个唯一的列(或一组列),则可以在中添加另一个表达式GROUP BY

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

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

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

当不为null时,in中的第二个表达式GROUP

BY返回一个常数。但是,当collection_id为null时,它将为每一行返回一个唯一值。0``collection_id

请注意,id这里只是对表中定义为唯一的列的引用。主键是不错的选择。如果我们在单个列上没有唯一索引,那么我们可以针对我们唯一约束中的每一列,或保证每一行唯一的任何表达式集重复相同类型的表达式。

... 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())

以上是 MySQL Group By和跳过对空值的分组 的全部内容, 来源链接: utcz.com/qa/416801.html

回到顶部