diff --git a/pmikhailov/postgresql/homework_window_functions.sql b/pmikhailov/postgresql/homework_window_functions.sql index 81b0974..4b799ea 100644 --- a/pmikhailov/postgresql/homework_window_functions.sql +++ b/pmikhailov/postgresql/homework_window_functions.sql @@ -19,12 +19,13 @@ INNER JOIN WITH order_revenue_cte AS ( SELECT oi.order_id, - oi.quantity * oi.price_at_purchase AS order_revenue + sum(oi.quantity * oi.price_at_purchase) AS order_revenue -- добавил агреграт по всем поз. в заказе FROM order_items oi + GROUP BY oi.order_id ) SELECT - u.id, + u.id AS user_id , u."name", o.id AS order_id, o.order_date, @@ -32,7 +33,6 @@ SELECT sum(orc.order_revenue) OVER ( PARTITION BY u.id ORDER BY o.order_date - ROWS UNBOUNDED PRECEDING ) AS running_revenue_for_user FROM users u @@ -40,6 +40,8 @@ INNER JOIN orders o ON u.id = o.user_id INNER JOIN order_revenue_cte orc ON o.id = orc.order_id +WHERE o.status NOT IN ('cancelled', 'refunded') -- добавил условие не включать отмененные заказы + /* Задание 3 */ @@ -47,14 +49,13 @@ INNER JOIN WITH user_revenue_cte AS ( SELECT o.user_id, - oi.quantity * oi.price_at_purchase AS order_revenue, - sum(oi.quantity * oi.price_at_purchase) OVER ( - PARTITION BY o.user_id) AS user_total_revenue + sum(oi.quantity * oi.price_at_purchase) AS user_total_revenue FROM orders o INNER JOIN - order_items oi ON o.id = oi.order_id) -SELECT DISTINCT + order_items oi ON o.id = oi.order_id + GROUP BY o.user_id) -- добавил group by, костыль убран +SELECT u."name", urc.user_total_revenue, RANK() OVER (ORDER BY urc.user_total_revenue DESC) AS revenue_rank, @@ -62,7 +63,7 @@ SELECT DISTINCT FROM users u INNER JOIN - user_revenue_cte urc ON u.id = urc.user_id + user_revenue_cte urc ON u.id = urc.user_id; /* Задание 4 */ @@ -104,10 +105,10 @@ INNER JOIN WITH order_revenue_cte AS ( SELECT oi.order_id, - oi.quantity * oi.price_at_purchase AS order_revenue + sum(oi.quantity * oi.price_at_purchase) AS order_revenue FROM order_items oi - ) + GROUP BY oi.order_id) -- добавил group by по order_id, теперь это сумма всего заказа, а не строки SELECT u.name, o.id, @@ -122,7 +123,7 @@ FROM INNER JOIN orders o ON u.id = o.user_id INNER JOIN - order_revenue_cte orc ON o.id = orc.order_id + order_revenue_cte orc ON o.id = orc.order_id; /* Задание 7 */