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

gre*_*gn3 2 mysql

我有一张桌子,例如:

table a
+------+-------+
| v1   | v2    |
+------+-------+
|    1 | one   |
|    2 | two   |
|    3 | two   |
|    4 | two   |
|    5 | NULL  |
|    6 | NULL  |
|    7 | three |
|    8 | three |
+------+-------+
Run Code Online (Sandbox Code Playgroud)

我想按列“v2”对该表中的数据进行分组...

mysql> select * from a group by v2 order by v1;
+----+-------+
| v1 | v2    |
+----+-------+
|  1 | one   |
|  2 | two   |
|  5 | NULL  |
|  7 | three |
+----+-------+
Run Code Online (Sandbox Code Playgroud)

...但将 NULL 值保留在单独的行上。是否可以防止 NULL 值折叠成一行?

Mic*_*son 5

这将完成您的要求:

select min(v1) as v1, v2 from a group by v2, ifnull(v2, v1) order by v1;
Run Code Online (Sandbox Code Playgroud)

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