微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决MySQL Group By和跳过对空值的分组

如果表中有一个唯一的列(或一组列),则可以在中添加一个表达式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())

解决方法

select * from dc_deal group by collection_id

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。