【发布时间】:2015-07-10 04:35:11
【问题描述】:
所以我想将负值变成 0。我找到了 2 个完全相同的解决方案:
SUM(IF(ordered_item.amount < 0, 0, ordered_item.amount)) as purchases
还有
SUM(CASE WHEN ordered_item.amount < 0 THEN 0 ELSE ordered_item.amount END) as purchases
他们给了我相同的结果,但哪一个会给我最好的性能?是否有一个更简单的解决方案可以将否定变成0。
【问题讨论】:
-
为什么不只是
MAX(ordered_item.amount, 0)? -
您可以使用
EXPLAIN {{QUERY}}来检查哪个查询更复杂 -
在大多数 RDBMS 中,查询计划器很可能会为类似的事情生成相同的执行计划。像@Germanaz0 建议的那样,在每个查询上使用
EXPLAIN。 -
OP,根据@Germanaz0 的解释,我对您的两个建议以及小提琴上的一个建议答案进行了解释:sqlfiddle.com/#!9/90f21/3 这三个都是相同的,所以选择一个你找到最易读且可能在未来最容易维护的。
-
@McAdam331 是的,我不确定我们所说的 SQL 的风格,我假设是 TSQL,但看起来它是 mySQL。概念上相同。
标签: mysql sql mysql-workbench