158 lines
2.9 KiB
SQL
158 lines
2.9 KiB
SQL
/* Задача 1
|
|
* Джойним в таком порядке т.к. не каждый юзер делал заказ
|
|
* + судя по порядку колонок мы хотим анализировать заказы
|
|
* (по сути выглядит так же как INNER)
|
|
* Но в обратном порядке можем увидеть кто не делал заказ
|
|
* и добавить их в условную рассылку
|
|
*/
|
|
SELECT
|
|
o.id AS order_id,
|
|
o.order_date,
|
|
status,
|
|
u."name" AS user_name,
|
|
country
|
|
FROM
|
|
orders o
|
|
LEFT JOIN
|
|
users u ON o.user_id = u.id
|
|
|
|
|
|
/* Задача 2 */
|
|
|
|
SELECT
|
|
order_id,
|
|
p."name" AS product_name,
|
|
quantity,
|
|
price_at_purchase
|
|
FROM
|
|
order_items oi
|
|
LEFT JOIN
|
|
products p ON oi.product_id = p.id -- AND oi.order_id = 1 из правой таблицы будут NULL там, где оба условия не выполнены
|
|
WHERE order_id = 1 -- в задании другой номер - 101, надо исправить в Notion, данные на п.4 уже другие
|
|
|
|
|
|
/* Задача 3 */
|
|
|
|
SELECT
|
|
order_id,
|
|
u."name" AS user_name,
|
|
p."name" AS product_name,
|
|
quantity,
|
|
price_at_purchase
|
|
FROM
|
|
orders o
|
|
LEFT JOIN
|
|
order_items oi ON o.id = oi.order_id
|
|
INNER JOIN
|
|
users u ON o.id = u.id
|
|
INNER JOIN
|
|
products p ON oi.product_id = p.id;
|
|
|
|
|
|
/* Задача 4 */
|
|
|
|
SELECT
|
|
u."name" AS user_name,
|
|
o.id AS order_id,
|
|
status
|
|
FROM
|
|
users u
|
|
LEFT JOIN
|
|
orders o ON u.id = o.user_id
|
|
|
|
|
|
/* Задача 5 */
|
|
|
|
SELECT
|
|
o.user_id,
|
|
u."name" AS user_name
|
|
FROM
|
|
users u
|
|
LEFT JOIN
|
|
orders o ON u.id = o.id
|
|
WHERE o.user_id IS NOT NULL
|
|
|
|
|
|
/* Задача 6 */
|
|
|
|
SELECT
|
|
o.id AS order_id,
|
|
u.name AS user_name,
|
|
p.name AS product_name,
|
|
quantity
|
|
FROM
|
|
orders o
|
|
LEFT JOIN
|
|
order_items oi ON o.id = oi.order_id
|
|
INNER JOIN
|
|
products p ON oi.product_id = p.id
|
|
INNER JOIN
|
|
users u ON o.user_id = u.id
|
|
WHERE p."name" ILIKE '%Mi Band 7%';
|
|
|
|
|
|
/* Задача 7 */
|
|
|
|
SELECT
|
|
p.name AS product_name,
|
|
order_id,
|
|
quantity
|
|
FROM
|
|
products p
|
|
FULL JOIN
|
|
order_items oi ON p.id = oi.product_id
|
|
ORDER BY product_name;
|
|
|
|
|
|
/* Задача 8 */
|
|
|
|
SELECT
|
|
o.id,
|
|
u."name" AS user_name,
|
|
p."name" AS product_name,
|
|
quantity,
|
|
price_at_purchase
|
|
FROM
|
|
orders o
|
|
LEFT JOIN
|
|
order_items oi ON o.id = oi.order_id
|
|
INNER JOIN
|
|
users u ON o.user_id = u.id
|
|
LEFT JOIN
|
|
products p ON oi.product_id = p.id
|
|
WHERE
|
|
o.status = 'paid';
|
|
|
|
|
|
/* Задача 9 */
|
|
|
|
SELECT
|
|
o.id AS order_id,
|
|
o.order_date,
|
|
p."name" AS product_name,
|
|
quantity,
|
|
price_at_purchase
|
|
FROM
|
|
orders o
|
|
LEFT JOIN
|
|
order_items oi ON o.id = oi.order_id
|
|
INNER JOIN
|
|
products p ON oi.product_id = p.id
|
|
INNER JOIN
|
|
users u ON o.user_id = u.id
|
|
WHERE u."name" ILIKE '%alice%';
|
|
|
|
|
|
/* Задача 10
|
|
* Задача противоречит изначальным органичениям NOT NULL
|
|
*/
|
|
|
|
SELECT
|
|
o.id AS order_id,
|
|
user_id,
|
|
status
|
|
FROM
|
|
orders o
|
|
FULL JOIN
|
|
order_items oi ON oi.order_id = o.id
|
|
WHERE product_id IS NULL AND o.status = 'created'; |