Merge pull request 'feat (sql): complete JOIN homework' (#93) from OS-412 into main

Reviewed-on: https://gitea.de-infra.servehttp.com/de-infrastructure/DWH/pulls/93
Reviewed-by: aleksey bogatyrev <abogatyrev@example.com>
This commit is contained in:
2026-06-11 02:05:03 +04:00
2 changed files with 169 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>postgresql</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
+158
View File
@@ -0,0 +1,158 @@
/* Задача 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.user_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.user_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';