SQL 0 如果是负值

SQL 0 if negative value

所以我想将负值变成 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.

您可以将字段定义为 "unsigned" 这样就不需要转换了

CREATE TABLE ordered_item ( 
order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
amount INT UNSIGNED NOT NULL, 
PRIMARY KEY (`order_id `) 
); 

https://dev.mysql.com/doc/refman/5.0/en/integer-types.html

您可以使用的替代方法是 GREATEST() 函数。

SUM(GREATEST(ordered_item.amount, 0)) as purchases

还没有看到这个答案,所以实现数学逻辑怎么样:

(abs(x)+x)/2

尝试使用 5 和 -5 分别给出 5 和 0。 不确定是不是计算量大,但是写起来很简单:

Select (ABS(ordered_item.amount) + ordered_item.amount ) / 2 as purchases
from ordered_item

如果你用你的数据集尝试一下,请告诉我速度,我得到的速度差不多。