Merge pull request 'feat (sql): complete aggregating and grouping homework' (#95) from OS-415 into main
Reviewed-on: https://gitea.de-infra.servehttp.com/de-infrastructure/DWH/pulls/95 Reviewed-by: aleksey bogatyrev <abogatyrev@example.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
|||||||
|
/* Задание 1 */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
category,
|
||||||
|
count(*) AS products_count
|
||||||
|
FROM
|
||||||
|
products p
|
||||||
|
GROUP BY category
|
||||||
|
ORDER BY products_count DESC;
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 2
|
||||||
|
* Тут всё решение в задании
|
||||||
|
* */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
order_id,
|
||||||
|
sum(quantity) AS total_quantity,
|
||||||
|
sum(quantity * price_at_purchase) AS order_revenue
|
||||||
|
FROM
|
||||||
|
order_items oi
|
||||||
|
GROUP BY order_id
|
||||||
|
ORDER BY order_revenue DESC;
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 3 */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
p.category,
|
||||||
|
COALESCE(sum(oi.quantity * oi.price_at_purchase), 0) AS category_revenue
|
||||||
|
FROM
|
||||||
|
products p
|
||||||
|
LEFT JOIN
|
||||||
|
order_items oi ON p.id = oi.product_id
|
||||||
|
GROUP BY p.category
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 4 */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
o.id AS order_id,
|
||||||
|
sum(oi.quantity * oi.price_at_purchase) AS order_revenue
|
||||||
|
FROM
|
||||||
|
orders o
|
||||||
|
LEFT JOIN
|
||||||
|
order_items oi ON o.id = oi.order_id
|
||||||
|
WHERE o.status = 'paid'
|
||||||
|
GROUP BY 1
|
||||||
|
ORDER BY 2 DESC
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 5 */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
p.category,
|
||||||
|
COALESCE(sum(oi.quantity * oi.price_at_purchase), 0) AS category_revenue
|
||||||
|
FROM
|
||||||
|
products p
|
||||||
|
LEFT JOIN
|
||||||
|
order_items oi ON p.id = oi.product_id
|
||||||
|
GROUP BY
|
||||||
|
p.category
|
||||||
|
HAVING
|
||||||
|
sum(oi.quantity * oi.price_at_purchase) > 1;
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 6 */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
country,
|
||||||
|
count(*) AS active_users_count
|
||||||
|
FROM
|
||||||
|
users u
|
||||||
|
WHERE
|
||||||
|
is_active = TRUE
|
||||||
|
GROUP BY
|
||||||
|
country
|
||||||
|
HAVING
|
||||||
|
count(is_active) > 2;
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 7 */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
p.name AS product_name,
|
||||||
|
COALESCE (sum(oi.quantity), 0) AS total_quantity_sold
|
||||||
|
FROM
|
||||||
|
products p
|
||||||
|
LEFT JOIN
|
||||||
|
order_items oi ON p.id = oi.product_id
|
||||||
|
GROUP BY p.name
|
||||||
|
ORDER BY 2 DESC
|
||||||
|
LIMIT 3
|
||||||
|
|
||||||
|
|
||||||
|
/* Задание 8
|
||||||
|
* Условие для HAVING в задаче кривое, < 100 ничего нет
|
||||||
|
* */
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
order_id,
|
||||||
|
SUM(quantity * price_at_purchase) AS order_revenue
|
||||||
|
FROM
|
||||||
|
order_items oi
|
||||||
|
GROUP BY
|
||||||
|
order_id
|
||||||
|
HAVING
|
||||||
|
SUM(quantity * price_at_purchase) < 10000
|
||||||
|
ORDER BY 2;
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user