added 11ый task in 10.5 Poryadok
This commit is contained in:
@@ -244,4 +244,40 @@
|
|||||||
1. чтение таблицы products
|
1. чтение таблицы products
|
||||||
2. Группировка с фильтрацией групп (hash aggregate)
|
2. Группировка с фильтрацией групп (hash aggregate)
|
||||||
3. Сортировка Sort key
|
3. Сортировка Sort key
|
||||||
4. LIMIT
|
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