如果表中有一个唯一的列(或一组列),那么我们可以向其中添加另一个表达式GROUP BY
.
当以下情况时,表达式需要为每一行返回一个唯一的值:collection_id
一片空白。否则,它返回一个常量。
假设我们有一个独特的id
表中的列,那么我们可以这样做:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
中的第二个表达式GROUP BY
返回一个常量值0
when collection_id
不为空。但当 collection_id 为 null 时,它会为每行返回一个唯一值。
注意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())