所以我想将负值变为0.我找到了两个完全相同的解决方案:
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
。
答案 0 :(得分:33)
您可以使用的另一种方法是GREATEST()功能。
SUM(GREATEST(ordered_item.amount, 0)) as purchases
答案 1 :(得分:3)
您可以将字段定义为&#34; unsigned&#34;所以不需要转换
CREATE TABLE ordered_item (
order_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
amount INT UNSIGNED NOT NULL,
PRIMARY KEY (`order_id `)
);