SELECT
SUM(
CASE
WHEN cumulative = 1
THEN percent
ELSE 0
END)
FROM phppos_items_taxes;
上記のステートメントが与えられた場合、これは次のことを行います。
mysql> select * FROM phppos_items_taxes;
+---------+-----------+---------+------------+
| item_id | name | percent | cumulative |
+---------+-----------+---------+------------+
| 1 | Tax 1 | 8.00 | 0 |
| 1 | Tax 2 | 10.00 | 1 |
| 3 | Sales Tax | 8.00 | 0 |
| 4 | Tax 1 | 20.00 | 0 |
| 4 | Tax 2 | 20.00 | 0 |
+---------+-----------+---------+------------+
これは、累積= 1である各行のパーセントを合計しますか?累積!= 1の場合、0が合計されます。
はい、そうです!より短く、よりクリーンなクエリ(IMHO)は、IF
ステートメントを使用することです。
SELECT SUM(IF(cumulative = 1, `percent`, 0)) FROM phppos_items_taxes;
アイテムを除外しないのはなぜですか?
SELECT
SUM(ISNULL(percent, 0))
FROM
phppos_items_taxes
WHERE
cumulative = 1
あなたの場合、各行が選択され、CASE
ステートメントを適用する必要があります。WHERE
フィルターを使用すると、SELECT句の前にWHERE句が実行されるであるため、大幅に高速になると思います。