Ответ 1
Да, да!
Более короткий и более чистый запрос (IMHO) должен был бы использовать инструкцию IF
:
SELECT SUM(IF(cumulative = 1, `percent`, 0)) FROM phppos_items_taxes;
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 |
+---------+-----------+---------+------------+
Этот SUM увеличивает процент для каждой строки, которая является кумулятивной = 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
это будет значительно быстрее, потому что выражение WHERE выполняется перед предложением SELECT