Простой способ подумать об этом - рассмотреть порядок применения шагов.
Шаг 1: где предложение фильтрует данные
Шаг 2: Выполнено группирование по (SUM/ MAX / MIN / ETC)
Шаг 3: Наличие предложения фильтрует результаты
Итак, в ваших 2 примерах:
SELECT agentId, SUM(quantity) total_sales
FROM sales s, houses h
WHERE s.houseId = h.houseId AND h.type = "condo"
GROUP BY agentId
ORDER BY total_sales;
Шаг 1: Фильтр по HouseId и Condo
Шаг 2: Суммируйте результаты (количество домов, соответствующих домовой и кондо)
SELECT agentId, SUM(quantity) total_sales
FROM sales s, houses h
GROUP BY agentId
HAVING s.houseId = h.houseId AND h.type = "condo"
ORDER BY total_sales;
Шаг 1: Без фильтра
Шаг 2: Добавьте количествоиз всех домов
Шаг 3: Отфильтруйте результаты по houseid и condo.
Надеюсь, это прояснит происходящее.
Самый простой способ решить, какой из них использовать: - использовать WHERE для фильтрации данных - использовать HAVING для фильтрации результатов агрегации (SUM / MAX / MIN / ETC)