Bra*_*ram 15 mysql sql mysql-workbench
所以我想将负值变为0.我找到了两个完全相同的解决方案:
SUM(IF(ordered_item.amount < 0, 0, ordered_item.amount)) as purchases
Run Code Online (Sandbox Code Playgroud)
和
SUM(CASE WHEN ordered_item.amount < 0 THEN 0 ELSE ordered_item.amount END) as purchases
Run Code Online (Sandbox Code Playgroud)
他们给我两个相同的结果,但哪个会给我最好的表现呢?是否可能有一个更简单的解决方案来消极0.
Cod*_*bie 34
您可以使用的另一种方法是GREATEST()函数.
SUM(GREATEST(ordered_item.amount, 0)) as purchases
Run Code Online (Sandbox Code Playgroud)
您可以将该字段定义为“无符号”,因此不需要转换
CREATE TABLE ordered_item (
order_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
amount INT UNSIGNED NOT NULL,
PRIMARY KEY (`order_id `)
);
Run Code Online (Sandbox Code Playgroud)
https://dev.mysql.com/doc/refman/5.0/en/integer-types.html
还没有看到这个答案,那么如何实现数学逻辑:
(绝对值(x)+x)/2
尝试使用 5 和 -5 分别给出 5 和 0。不确定它是否计算密集,但很容易写:
Select (ABS(ordered_item.amount) + ordered_item.amount ) / 2 as purchases
from ordered_item
Run Code Online (Sandbox Code Playgroud)
如果你用你的数据集尝试一下,请告诉我速度,我得到了类似的速度。
| 归档时间: |
|
| 查看次数: |
15465 次 |
| 最近记录: |