Вопрос по 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
  1. считаем количество заказов:

    SELECT `user_id` FROM `orders` GROUP BY `user_id` HAVING COUNT(*) > 2;
    
  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;

PHPize.online

→ Ссылка