Как работает Group By аггрегатная функция и Having во вложенном запросе?
Не понимаю почему вложенный запрос возвращает 4 строки, когда по логике должен был вернуть 3. Есть таблица с товарами, ключевые поля цена и категория.
Если выделить внутренний запрос и выполнить самостоятельно, вернется ожидаемо 3 строки - запрашивается данные из таблицы , они (1) сгруппированны и (2) отфильтрованны хавнгом. Вот внутренни запрос:
SELECT max(`buyPrice`) `max_bp`
from `products`
GROUP BY `category` HAVING `max_bp` > 999
Тепрь полный запрос, у которого внутри тот, что выше:
SELECT *
FROM `products`
WHERE `buyPrice` IN (
SELECT max(`buyPrice`) `max_bp`
from `products` AS `p`
WHERE `products`.`buyPrice` = `p`.`buyPrice`
GROUP BY `category` HAVING `max_bp` > 999
)
И вот это вложенный вернет почему-то 4 строки.
Такое впечатление, что внутренний GROUP BY перестает работать. Ведь WHERE buyPrice
IN получив 3 строки должен бы просто расширить таблицу.
Не прошу исправить его, а лишь пояснить как это работает?
Вся таблица и запросы тут sqlfiddle.com