首页 > 解决方案 > 其他情况的 SQL 最佳实践

问题描述

我正在使用mysql。刚刚看到一个地方有一个 case 语句,在 SUM 中没有其他地方,在 IFNULL 中有另一个地方。

这安全吗?这更快吗?最佳做法是什么?

sum(case when somevalue>100 then somevalue end) as answer

或者

sum(case when somevalue>100 then somevalue else 0 end) as answer

标签: mysqlsql

解决方案


这些做不同的事情。

NULL如果条件不匹配,则第一个返回where

第二个返回0。但NULL如果您没有GROUP BY并且没有聚合行,它可以返回。

你应该使用你想要的(通常第二个是你想要的)。此外,与读取数据和处理查询所需的其他处理相比,任何性能差异都是微观的——甚至可能无法始终如一地衡量。这是一个“微优化”,很少值得去思考。


推荐阅读