Подзапрос выдаёт не совсем то, что нужно
Изучаю подзапросы.
Как ни пытался, на выходе получаю не совсем то, что мне нужно, либо пустоту.
-- В таблице orders хранятся заказы пользователей, а в users непосредственно сами покупатели.
-- Получите информацию о покупателях, которые сделали самый дорогой заказ.
-- Заказов с максимальной стоимостью может быть несколько, а значит и покупателей может быть несколько.
-- Учитывайте только завершенные заказы.
-- Данные отсортируйте по id покупателей.
**orders**
id | user_id | date | amount | status |
---|---|---|---|---|
1 | 3 | 2014-01-23 17:04:04 | 4500 | completed |
2 | 1 | 2014-03-12 12:12:43 | 700 | completed |
3 | 10 | 2014-12-31 08:53:25 | 1240 | new |
4 | 7 | 2015-01-04 18:23:09 | 500 | completed |
5 | 1 | 2015-01-04 18:25:27 | 8700 | cancelled |
6 | 4 | 2015-01-12 09:23:14 | 1350 | completed |
7 | 10 | 2015-01-14 17:16:39 | 600 | new |
8 | 1 | 2015-02-01 13:32:17 | 680 | completed |
9 | 3 | 2014-02-16 14:44:05 | 1400 | completed |
10 | 5 | 2015-02-28 02:00:47 | 4300 | cancelled |
11 | 10 | 2015-03-12 08:30:23 | 8000 | completed |
12 | 2 | 2015-04-01 13:04:47 | 980 | completed |
13 | 2 | 2015-04-14 23:21:25 | 1600 | completed |
14 | 3 | 2015-04-15 04:17:11 | 8000 | completed |
15 | 7 | 2015-04-16 08:21:37 | 8000 | new |
**users**
id | first_name | last_name | age |
---|---|---|---|
1 | Вероника | Петрова | 20 |
2 | Светлана | Иванова | 17 |
3 | Елена | Абрамова | 18 |
4 | Василиса | Кац | 15 |
5 | Алёна | Сорокина | 22 |
6 | Алёна | Федькова | 28 |
7 | Лиана | Сорокина | 21 |
8 | Карина | Белая | 30 |
9 | Анастасия | Дейчман | 16 |
10 | Юлия | Фёдорова | 25 |
В результате должны быть только id 3 и 10, но у меня выстреливает ещё и юзер под 7 номером со статусом "new". Не могу понять, почему? Как исправить? Вот, что я делал
SELECT *
FROM users
WHERE id IN (
SELECT user_id
FROM orders
WHERE amount = (
SELECT MAX(amount)
FROM orders
WHERE status = 'completed'
)
)
ORDER BY id
Ответы (1 шт):
Всё оказалось намного проще. Всего-то в выборке по user_id
также нужно было указать status = 'completed'
:
SELECT *
FROM users
WHERE id IN (
SELECT user_id
FROM orders
WHERE status = 'completed' AND amount IN (
SELECT MAX(amount)
FROM orders
WHERE status = 'completed'
)
)
ORDER BY id
На выходе получаю юзеров 3 и 7.