#mysql #left-join #where-clause
#MySQL #левое соединение #where-предложение
Вопрос:
Текущий результат:
SELECT CT.cat2 as Cat, SUM(MT.`revenue`) as Revenue
FROM sales MT
LEFT JOIN `2016productcodes` CT
ON MT.productsku = CT.productcode
WHERE MT.`date` BETWEEN '2016-10-01' AND '2016-10-13' AND revenue > 0
GROUP BY CT.cat2
Cat | Revenue |
---------------------------
cat1 | 250.00 |
cat3 | 100.00 |
cat5 | 32.00 |
Я хочу показать ВСЕ сгруппированные категории, хотя (для отображения NULL, BLANK или «0.00», когда нет дохода .. не имеет значения).
Желаемый результат:
Cat | Revenue |
---------------------------
cat1 | 250.00 |
cat2 | |
cat3 | 100.00 |
cat4 | |
cat5 | 32.00 |
Я пробовал этот запрос, и он действительно показывает все категории, но группирует весь доход в каждой категории (доход всегда одинаков).
SELECT cat2 as Cat, (SELECT
SUM(MT.`revenue`)
FROM 2016productcodes CT
LEFT JOIN `sales` MT
ON MT.productsku = CT.productcode
WHERE MT.`date` BETWEEN '2016-10-01' AND '2016-10-13'
) Revenue
FROM 2016productcodes
GROUP BY cat2
Комментарии:
1. Вы пробовали просто изменить порядок соединения? (т.е.
`2016productcodes` CT LEFT JOIN sales MT ...
) …. и вы захотите переместить текущие критерии WHERE в критерии объединения.2. Не повезло, когда я отменяю JOIN, типичные те же результаты.
3. Если вы не переместите
WHERE
критерий вJOIN
критерии, запрос будет действовать какINNER JOIN
(поскольку результаты для «cats» без продаж будут иметьMT
значения NULL, которые будут отфильтровываться WHERE .)4. Бинго, действительно, это сработало. Пришлось проиндексировать несколько полей, но теперь все работает отлично, спасибо!