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