我有一个表有一个名为tableNum的列和另一个名为deviceNum的列
我想按tableNum进行分组,但如果tableNum为空,那么我需要按deviceNum进行分组.
我目前使用union语句完成此操作,以便我可以执行两个不同的语句,但是想知道是否有更好的方法.
非常感谢
戴夫
您可以按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可以并行化子查询,所以它会更快
归档时间: |
|
查看次数: |
2291 次 |
最近记录: |