web-dev-qa-db-fra.com

SQL 0 si valeur négative

Je veux donc transformer une valeur négative en 0. J'ai trouvé 2 solutions qui font exactement la même chose:

SUM(IF(ordered_item.amount < 0, 0, ordered_item.amount)) as purchases

Et

SUM(CASE WHEN ordered_item.amount < 0 THEN 0 ELSE ordered_item.amount END) as purchases

Ils me donnent tous les deux le même résultat, mais qui me donnerait le meilleur performance? Et y a-t-il peut-être une solution plus simple pour transformer les négatifs en 0.

18
Bram

Une autre approche que vous pourriez utiliser est la fonction GREATEST () .

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

Vous pouvez définir le champ comme "non signé" afin qu'aucune conversion ne soit requise

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

4
Volkan Ulukut