Вопрос по sql, можно ли это сделать одним SELECT запросом?
таблица пользователей:
users
----------
`id` int(11)
`email` varchar(55)
`login` varchar(55)
и таблица заказов
orders
--------
`id` int(11)
`user_id` int(11)
`price` int(11)
Нужно вывести список logino'в-пользователей, которые сделали более двух заказов. можно ли это сделать одним SELECT запросом ?
Ответы (1 шт):
Автор решения: Slava Rozhnev
→ Ссылка
считаем количество заказов:
SELECT `user_id` FROM `orders` GROUP BY `user_id` HAVING COUNT(*) > 2;делаем SELECT из users
SELECT `users`.`login` FROM `users` WHERE `users`.`id` IN ( SELECT `user_id` FROM `orders` GROUP BY `user_id` HAVING COUNT(*) > 2 );
Здесь можно увидеть пример исполнения: PHPize.online
Возможен вариант используя JOIN:
SELECT `users`.`login`
FROM `users`
JOIN (
SELECT `user_id` FROM `orders` GROUP BY `user_id` HAVING COUNT(*) > 2
) `more2orders` ON `more2orders`.`user_id` = `users`.`id`;
или
SELECT `users`.`login`
FROM `users`
JOIN `orders` ON `orders`.`user_id` = `users`.`id`
GROUP BY `users`.`login`
HAVING COUNT(*) > 2;