Mysql 分组,但如果为空则忽略

Mysql 分组,但如果为空则忽略,mysql,Mysql,我试图将一列m\u group\u name分组(或至少使其唯一),除非该组为空。这基本上是为了在能够查看现有组的同时,查看尚未有组的内容(然后可以进行编辑以放置到一个组中) 比如, id | m_group_name --------------------- 1 | Red 2 | Blue 3 | 4 | Red 5 | 理想情况下,会产生一个红色、一个蓝色和两个空白 我尝试过将空格设为NULL并给它一个UUID值(在修改了Stackoverflow上类似的内

我试图将一列
m\u group\u name
分组(或至少使其唯一),除非该组为空。这基本上是为了在能够查看现有组的同时,查看尚未有组的内容(然后可以进行编辑以放置到一个组中)

比如,

id  |  m_group_name
---------------------
 1  | Red
 2  | Blue
 3  | 
 4  | Red
 5  | 
理想情况下,会产生一个红色、一个蓝色和两个空白

我尝试过将空格设为NULL并给它一个UUID值(在修改了Stackoverflow上类似的内容之后),但似乎使每个NULL都具有相同的值

SELECT *, IFNULL(m_group_name,UUID()) AS m_group FROM m GROUP BY m_group
理想情况下,我不希望使用NULL来表示完全诚实

编辑:
意识到示例中“m_group_name”被错误地标记为“group”,已更正。

从m中选择*,其中长度(group)在(0,NULL)
*
LENGTH(NULL)
将返回
NULL
<代码>长度(“”)将返回
0

您想查看所有尚未有
组的行
,对吗

编辑: 好的,我仔细看了。这个怎么样:

 SELECT * FROM m WHERE LENGTH(Group) NOT IN (0, NULL) GROUP BY Group
 UNION ALL
 SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL)

这种方法不起作用,因为UUID()函数将为每个查询返回一个值,而不是为每行返回一个单独的值

您可以使用主键:

SELECT *, IFNULL(m_group_name,id) AS m_group FROM m GROUP BY m_group
或者可以使用不同的函数,例如RAND(),为每行生成单独的值。如果需要字符串值,可以对其应用类似MD5()的哈希函数:

SELECT *, IFNULL(m_group_name,md5(rand())) AS m_group FROM m GROUP BY m_group

在一个查询中,所有尚未包含组的行以及唯一的组名-可能吗?谢谢!这是所有的空白组,如果需要的话,也需要那些其他独特的组:这就是我的答案的“编辑”部分下面的代码:-在修改了一个版本之后,它工作了,但是我必须从第一套括号中去掉NULL。由于某些原因,包括NULL导致未输出任何内容。再次感谢!这就解释了为什么它似乎使用了相同的值——感谢您的解释和备选答案:)