В SQL 0, если отрицательное значение

поэтому я хочу превратить отрицательное значение в 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.

2 ответов


альтернативный подход вы могли бы использовать GREATEST ().

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

вы можете определить поле как "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