У меня есть таблица товаров и отдельная таблица, содержащая отдельные покупки каждого товара. Не все товары были куплены. Я выбираю количество покупок и объединяю его с таблицей items с помощью оператора, подобного следующему:
SELECT items.name, purchases_count
FROM `items`
LEFT JOIN (SELECT sales.item_name, SUM(unit_sales) AS purchases_count
FROM sales GROUP BY item_name) sales ON sales.item_name = items.uid
В результате получаются данные, подобные следующим:
+------+-----------------+
| name | purchases_count |
|------+-----------------+
| Shoe | 12 |
| Belt | NULL |
+------+-----------------+
Моя проблема возникает, когда я хочу отфильтровать этот результат по purchases_count
. Если я использую WHERE purchases_count < 10
или что-то подобное, товары, в которых вообще нет записей о продажах (т.е. те, у которых значение NULL
), исключаются из поиска.
Я попытался использовать COALESCE(purchases_count,0) AS purchases_count
, который правильно устанавливает NULL
записи в 0, но они все равно не появляются при использовании WHERE
. Я подозреваю, что COALESCE
происходит после WHERE
.
Я хотел бы иметь возможность фильтровать это число с помощью WHERE
и включать NULL
результаты (как нули), если это возможно. Есть предложения?