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导致未输出任何内容。再次感谢!这就解释了为什么它似乎使用了相同的值——感谢您的解释和备选答案:)