Korzystając z widoku utworzonego w zadaniu 23, podsumujmy sprzedaż według produktów.
- a) które produkty sprzedawały się najlepiej – ranking top 10
- b) który produkt sprzedawał się najlepiej w konkretnych latach – ranking top 5 produktów na dany rok
- c) który produkt sprzedawał się najlepiej w każdej kategorii?
- d) który produkt sprzedawał się najlepiej w pierwszych trzech miesiącach lat 2006-2007? Ranking top 3 produktów.
Schemat: OE, Tabela: Product_Information oraz widok utworzony w zadaniu 23, Kolumny: product_id, quantity, ord_year, ord_month, category_id, Wynik: a) 10 rows b) 20 rows c) 17 rows d) 15 rows
[spoiler title=’Rozwiązanie’ style=’default’ collapse_link=’true’]- a) SELECT product_id, SUM(quantity) AS quantity, dense_rank() over(order by SUM(quantity) DESC) AS rank
FROM my_order_view
GROUP BY product_id
ORDER BY quantity DESC
FETCH FIRST 10 rows WITH ties;
- b) WITH Subquery AS (
SELECT ord_year, product_id, SUM(quantity) AS quantity,
dense_rank() over(partition by ord_year order by SUM(quantity) DESC) AS rank
FROM my_order_view
GROUP BY product_id, ord_year
)
SELECT * FROM Subquery
WHERE rank <= 5
ORDER BY ord_year, rank;
- c) WITH Subquery AS (
SELECT pi.category_id, product_id, SUM(quantity) AS quantity,
dense_rank() over(partition by pi.category_id order by SUM(quantity) DESC) AS rank
FROM my_order_view inner join product_information pi using(product_id)
GROUP BY pi.category_id, product_id
)
SELECT category_id, product_id, quantity
FROM Subquery
WHERE rank = 1;
- d) WITH Subquery AS (
SELECT ord_year, ord_month, product_id, SUM(quantity) AS quantity,
dense_rank() over(partition by ord_year, ord_month order by SUM(quantity) DESC) AS rank
FROM my_order_view
WHERE ord_month in(1,2,3) and ord_year in(2006, 2007)
GROUP BY ord_year, ord_month, product_id
)
SELECT * FROM Subquery
WHERE rank <= 3;
[/spoiler]