fix(sql):window func - hw mistakes corrected
This commit is contained in:
@@ -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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user