fix(sql):window func - hw mistakes corrected

This commit is contained in:
pavel
2026-06-06 21:22:55 +02:00
parent 38d3592afa
commit fc41b7ce31
@@ -19,12 +19,13 @@ INNER JOIN
WITH order_revenue_cte AS ( WITH order_revenue_cte AS (
SELECT SELECT
oi.order_id, oi.order_id,
oi.quantity * oi.price_at_purchase AS order_revenue sum(oi.quantity * oi.price_at_purchase) AS order_revenue -- добавил агреграт по всем поз. в заказе
FROM FROM
order_items oi order_items oi
GROUP BY oi.order_id
) )
SELECT SELECT
u.id, u.id AS user_id ,
u."name", u."name",
o.id AS order_id, o.id AS order_id,
o.order_date, o.order_date,
@@ -32,7 +33,6 @@ SELECT
sum(orc.order_revenue) OVER ( sum(orc.order_revenue) OVER (
PARTITION BY u.id PARTITION BY u.id
ORDER BY o.order_date ORDER BY o.order_date
ROWS UNBOUNDED PRECEDING
) AS running_revenue_for_user ) AS running_revenue_for_user
FROM FROM
users u users u
@@ -40,6 +40,8 @@ INNER JOIN
orders o ON u.id = o.user_id orders o ON u.id = o.user_id
INNER JOIN INNER JOIN
order_revenue_cte orc ON o.id = orc.order_id order_revenue_cte orc ON o.id = orc.order_id
WHERE o.status NOT IN ('cancelled', 'refunded') -- добавил условие не включать отмененные заказы
/* Задание 3 */ /* Задание 3 */
@@ -47,14 +49,13 @@ INNER JOIN
WITH user_revenue_cte AS ( WITH user_revenue_cte AS (
SELECT SELECT
o.user_id, o.user_id,
oi.quantity * oi.price_at_purchase AS order_revenue, sum(oi.quantity * oi.price_at_purchase) AS user_total_revenue
sum(oi.quantity * oi.price_at_purchase) OVER (
PARTITION BY o.user_id) AS user_total_revenue
FROM FROM
orders o orders o
INNER JOIN INNER JOIN
order_items oi ON o.id = oi.order_id) order_items oi ON o.id = oi.order_id
SELECT DISTINCT GROUP BY o.user_id) -- добавил group by, костыль убран
SELECT
u."name", u."name",
urc.user_total_revenue, urc.user_total_revenue,
RANK() OVER (ORDER BY urc.user_total_revenue DESC) AS revenue_rank, RANK() OVER (ORDER BY urc.user_total_revenue DESC) AS revenue_rank,
@@ -62,7 +63,7 @@ SELECT DISTINCT
FROM FROM
users u users u
INNER JOIN INNER JOIN
user_revenue_cte urc ON u.id = urc.user_id user_revenue_cte urc ON u.id = urc.user_id;
/* Задание 4 */ /* Задание 4 */
@@ -104,10 +105,10 @@ INNER JOIN
WITH order_revenue_cte AS ( WITH order_revenue_cte AS (
SELECT SELECT
oi.order_id, oi.order_id,
oi.quantity * oi.price_at_purchase AS order_revenue sum(oi.quantity * oi.price_at_purchase) AS order_revenue
FROM FROM
order_items oi order_items oi
) GROUP BY oi.order_id) -- добавил group by по order_id, теперь это сумма всего заказа, а не строки
SELECT SELECT
u.name, u.name,
o.id, o.id,
@@ -122,7 +123,7 @@ FROM
INNER JOIN INNER JOIN
orders o ON u.id = o.user_id orders o ON u.id = o.user_id
INNER JOIN INNER JOIN
order_revenue_cte orc ON o.id = orc.order_id order_revenue_cte orc ON o.id = orc.order_id;
/* Задание 7 */ /* Задание 7 */