В моей базе данных есть 2 таблицы: предмет и категория.Элементы могут быть активными или неактивными и иметь идентификатор категории, связанный с идентификатором записи в таблице категорий.
Я хочу выполнить запрос, чтобы отобразить все категории, с общей стоимостью .активных элементов для категории
Поэтому моя цель - вернуть что-то похожее на это:
+--------+------------+---------------+
| id | cat_name | total_cost |
+--------+------------+---------------+
| 1 | cat 1 | 12 |
| 2 | cat 2 | 0 |
| 3 | cat 3 | 45 |
+--------+------------+---------------+
Мой первый запрос:
SELECT a.*,
SUM(b.cost) AS total_cost
FROM categories a LEFT JOIN items b
ON(a.id = b.category_id)
GROUP BY a.category_name
работает нормально, но он возвращает NULL-элементы вместо 0 и использует все элементы независимо от того, активен / неактивен:
+--------+------------+---------------+
| id | cat_name | total_cost |
+--------+------------+---------------+
| 1 | cat 1 | 44 |
| 2 | cat 2 | NULL |
| 3 | cat 3 | 87 |
+--------+------------+---------------+
мой второй запрос адресует значения NULL:
SELECT a.*,
SUM(IF(b.cost IS NULL, 0, b.cost)) AS total_cost
FROM categories a LEFT JOIN items b
ON(a.id = b.category_id)
GROUP BY a.category_name
и получается какитак:
+--------+------------+---------------+
| id | cat_name | total_cost |
+--------+------------+---------------+
| 1 | cat 1 | 44 |
| 2 | cat 2 | NULL |
| 3 | cat 3 | 87 |
+--------+------------+---------------+
Итак, в моем крошечном бесполезном мозгу я пытаюсь выполнить следующий запрос, добавив предложение WHERE в таблицу b, где active должен = 1 (true)
SELECT a.*,
SUM(IF(b.cost IS NULL, 0, b.cost)) AS total_cost
FROM categories a LEFT JOIN items b
ON(a.id = b.category_id)
WHERE b.active = 1
GROUP BY a.category_name
получить следующее:
+--------+------------+---------------+
| id | cat_name | total_cost |
+--------+------------+---------------+
| 1 | cat 1 | 12 |
| 3 | cat 3 | 45 |
+--------+------------+---------------+
, чтобы вы могли видеть, я хотел бы вернуть весь диапазон категорий, даже когда правая таблица не дает результатов совпадения ... Любой берет за миллион воображаемых крутых точек