如何防止MYSQL GROUP BY将NULL值折叠为单个行

时间:2012-03-28 17:40:28

标签: mysql

我有一张表如:

table a
+------+-------+
| v1   | v2    |
+------+-------+
|    1 | one   |
|    2 | two   |
|    3 | two   |
|    4 | two   |
|    5 | NULL  |
|    6 | NULL  |
|    7 | three |
|    8 | three |
+------+-------+

我想通过列'v2'...

对此表中的数据进行分组
mysql> select * from a group by v2 order by v1;
+----+-------+
| v1 | v2    |
+----+-------+
|  1 | one   |
|  2 | two   |
|  5 | NULL  |
|  7 | three |
+----+-------+

...但是将NULL值保留在不同的行上。是否可以防止将NULL值折叠为单行?

1 个答案:

答案 0 :(得分:4)

这将完成你所要求的:

select min(v1) as v1, v2 from a group by v2, ifnull(v2, v1) order by v1;

这将按v2进行分组,除非它是NULL,在这种情况下,它将按v1进行分组。由于您的两个NULL值对v1有两个不同的值,因此会将它们分开。