SQL 0如果为负值

时间:2015-04-30 12:54:57

标签: mysql sql mysql-workbench

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

2 个答案:

答案 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 `) 
); 

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