按字段分组,但如果是另一个字段的空组

Dav*_*ave 2 mysql group-by

我有一个表有一个名为tableNum的列和另一个名为deviceNum的列

我想按tableNum进行分组,但如果tableNum为空,那么我需要按deviceNum进行分组.

我目前使用union语句完成此操作,以便我可以执行两个不同的语句,但是想知道是否有更好的方法.

非常感谢

戴夫

Luk*_*der 5

您可以按coalesce/ifnull进行分组(在此示例中它们是相同的):

GROUP BY COALESCE (tableNum, deviceNum)
GROUP BY IFNULL (tableNum, deviceNum)
Run Code Online (Sandbox Code Playgroud)

查看文档:

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#function_coalesce

如果两列保持相同的值,那么tableNum和deviceNum之间可能会发生一些无意义的分组冲突.根据您想要获得的结果类型,您可以编写类似这样的内容,以避免冲突:

GROUP BY CASE WHEN tableNum IS NOT NULL 
              THEN CONCAT('tableNum : ', tableNum)
              ELSE CONCAT('deviceNum : ', deviceNum)
              END
Run Code Online (Sandbox Code Playgroud)

但这可能会很慢,因为CONCAT没有机会使用索引......只是为了给你一个想法.注意:正如ypercube所说,UNION因为MySQL可以并行化子查询,所以它会更快