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 `)
);
您可以使用的替代方法是 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
如果你用你的数据集尝试一下,请告诉我速度,我得到的速度差不多。
所以我想将负值变成 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 `)
);
您可以使用的替代方法是 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
如果你用你的数据集尝试一下,请告诉我速度,我得到的速度差不多。