分组但忽略如果空白

时间:2011-02-23 13:58:25

标签: mysql

我正在尝试对列m_group_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”在示例中被错误地标记为“组” - 已更正。

2 个答案:

答案 0 :(得分:1)

该方法不起作用,因为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

答案 1 :(得分:0)

SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL) * LENGTH(NULL)将返回NULLLENGTH('')将返回0

我是对的,你想要查看还没有Group的所有行吗?

修改: 好的,我仔细阅读了。怎么样:

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