![](/img/trans.png)
[英]How to skip NULL values from MySQL CONCAT and GROUP_CONCAT
[英]MySQL Group By And Skip Grouping On Null Values
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)
如果表中有一个唯一的列(或列集),那么我们可以向GROUP BY
添加另一个表达式。
当collection_id
为null时,表达式需要为每一行返回唯一值。 否则,它返回一个常量。
假设我们在表中有一个唯一的id
列,那么我们可以这样做:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
当collection_id
不为null时, GROUP BY
中的第二个表达式返回一个常量值0
。 但是当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())
尝试这个:
SELECT * FROM dc_deal
GROUP BY collection_id,
case WHEN collection_id IS NULL THEN ID ELSE 0 END
将ID
替换为表中的另一列以进行分组。
请参阅SQL Fiddle中的示例。
尝试这个 :
select * from dc_deal其中collection_id不是由collection_id组成的NUll组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.