diff --git a/dmedvedev/union.sql b/dmedvedev/union.sql new file mode 100644 index 0000000..927faaa --- /dev/null +++ b/dmedvedev/union.sql @@ -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 идеи: что можно с этими товарами сделать)? +Что эти товары себя никаким образом не окупают, возмонжо их вообще стоит убрать из ассортимента. +*/ \ No newline at end of file