web-dev-qa-db-ja.com

負の値の場合は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に変換するsimplerソリューションがあるかもしれません。

18
Bram

使用できる別のアプローチは、 GREATEST() 関数です。

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

フィールドを「符号なし」として定義できるため、変換は必要ありません。

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