added 11ый task in 10.5 Poryadok
This commit is contained in:
@@ -245,3 +245,39 @@
|
||||
2. Группировка с фильтрацией групп (hash aggregate)
|
||||
3. Сортировка Sort key
|
||||
4. LIMIT
|
||||
|
||||
|
||||
- **Задача 11** — Подзапросы и порядок
|
||||
|
||||
SELECT
|
||||
u.name,
|
||||
u.age,
|
||||
(SELECT COUNT(*)
|
||||
FROM orders o
|
||||
WHERE o.user_id = u.id) AS orders_count
|
||||
FROM users u
|
||||
WHERE u.country = 'Россия'
|
||||
ORDER BY orders_count DESC;
|
||||
|
||||
**❓ Вопросы:**
|
||||
|
||||
1. Когда выполняется подзапрос в `SELECT`?
|
||||
В самом начале.
|
||||
|
||||
2. Можно ли использовать алиас `orders_count` в `WHERE`?
|
||||
Нет, потому что WHERE не видит алиасы
|
||||
|
||||
3. Можно ли использовать его в `ORDER BY`?
|
||||
Да, потому что order by выполняется после SELECT
|
||||
|
||||
4. Перепиши этот запрос через `JOIN`. Какой вариант быстрее? Проверь с `EXPLAIN ANALYZE`! 0.065-0.15
|
||||
SELECT
|
||||
u.name,
|
||||
u.age,
|
||||
COUNT(o.id) AS orders_count
|
||||
FROM users u
|
||||
LEFT JOIN orders o ON o.user_id = u.id
|
||||
GROUP BY u.name, u.age
|
||||
ORDER BY orders_count DESC;
|
||||
|
||||
Второй запрос через JOIN выполняется дольше (0.06 и 0.08 мс соответственно)
|
||||
Reference in New Issue
Block a user