@sp999999

Как выполнить подзапрос в SQL (SELECT с передачей параметра из основного запроса?

Подскажите, как решить такую задачу.

Условно, есть таблица Users
id, name

Есть таблица Orders
id, number, user_id

Я хочу через подзапрос посчитать кол-во заказов по каждому пользователю.

Что-то вроде
select users.name as username,
(select count(id) from orders where user_id=users.id) as orders_count
from users

Насколько я понимаю, т.к. подзапросы выполняются снизу вверх, то users.id не получиться передать в подзапрос.

Да, можно сделать join, но с ним проблема у меня, т.к. в моем случае он уже там есть по другим критериям с этими же таблицами, по которым я хочу посчитать данные, в общем нужен какой другой механизм. Т.е.
  • Вопрос задан
  • 1152 просмотра
Пригласить эксперта
Ответы на вопрос 2
@MikUrrey
select u.name as username,
(select count(id) from orders where user_id=u.id) as orders_count
from users u

Добавляем псевдоним для таблицы users. Так должно сработать.
Но вариант не очень, предполагаю, что зная все условия, можно придумать более производительное решение.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
SELECT users.name AS username,
       count(orders.id) AS orders_count 
FROM users
JOIN orders ON orders.user_id=users.id
GROUP BY users.name

Если нужно вывести и пользователей, у которых нет заказов, с нулевым количеством, то использовать LEFT JOIN.

PS. Запрос из текста вопроса тоже корректен и должен дать правильный результат. Причём с 50% вероятностью он будет преобразован в мой (точнее, оба дадут один и тот же план выполнения). Остальные 50% - на то, что он будет выполнен итерационно (и тогда скорее всего просто будет выполняться дольше).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 06:09
30000 руб./за проект
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект