add tasks with union and union all

This commit is contained in:
Dmitry Medvedev
2026-05-28 01:36:48 +05:00
parent 6540b576d2
commit ca6903bde4
+65
View File
@@ -0,0 +1,65 @@
--таск 1
SELECT id, name, 'active' AS user_status
FROM users
WHERE is_active IS TRUE
UNION ALL
SELECT id, name, 'inactive' AS user_status
FROM users
WHERE is_active IS FALSE
ORDER BY name;
/*1. Что будет, если вместо **`UNION ALL`** написать **`UNION`**?
- Попробуй и запиши, изменилось ли количество строк.
В данном случае ничего не поменяется, но вообще если
бы были одинаковые строчки в двух запросах, то дубликаты бы удалились
Зачем в результат добавлять колонку user_status, если флаг активности уже есть в таблице users?
Чтобы уйти от булевые true и false и перейти к нормально-читаемым
*/
--таск 2
SELECT id AS order_id, user_id, order_date, 'old' AS period
FROM orders o
WHERE order_date < '2024-01-01'
UNION ALL
SELECT id AS order_id, user_id, order_date, 'new' AS period
FROM orders o
WHERE order_date >= '2024-01-01'
ORDER BY order_date, order_id;
/*Как ты по колонке period поймёшь, сколько заказов было до и после даты‑границы (словами, без SQL)?
*/
--task 3
SELECT DISTINCT oi.product_id, p.name AS product_name, 'ordered' product_status
FROM products p
JOIN order_items oi ON oi.product_id = p.id
UNION ALL
SELECT oi.product_id, p.name AS product_name, 'never_ordered' product_status
FROM products p
LEFT JOIN order_items oi ON oi.product_id = p.id
WHERE oi.product_id IS NULL
ORDER BY product_name
/*
1. Почему в запросе на «не покупали» проверка IS NULL должна быть по полю из order_items, а не из products?
Потому что именно в order_items фиксируются заказанные позиции, а в products просто наименования товаров и не важно кто-то их покупал или нет.
2.Какой сигнал для бизнеса даёт список с product_status = 'never_ordered' (1–2 идеи: что можно с этими товарами сделать)?
Что эти товары себя никаким образом не окупают, возмонжо их вообще стоит убрать из ассортимента.
*/