#sql #amazon-redshift
#sql #amazon-redshift
Вопрос:
Я пытаюсь извлечь верхний 20-процентный показатель проданных продуктов на основе количества просмотров страниц. Есть ли какая-либо прямая функция в redshift?
Нужны предложения
Запрос на продажу:
SELECT product_category,
product_id,
sum(page_views) as page_views,
sum(units) as total_units
FROM order o
JOIN product p
ON p.product_id=o.product_id
JOIN page_views f
ON f.product_id=o.product_id
WHERE
extract (year from order_date) =2019
and extract (month from order_date) =12
and product_category='electronics'
GROUP BY
1,2,3
Ответ №1:
Существует PERCENT_RANK
оконная функция, которую вы должны запустить для sum (page_views), и она сообщит вам, каков рейтинг в процентах. Затем вы можете продолжить фильтрацию pct_rnk <= 0.2
. Я думаю, вам нужно будет использовать CTE для фильтрации — вы не можете фильтровать результаты оконной функции
Что-то вроде (я его не тестировал):
WITH ranked_products as (
SELECT product_category,
product_id,
PERCENT_RANK() OVER (ORDER BY sum(page_views) desc) as pct_rnk
FROM order o
JOIN product p
ON p.product_id=o.product_id
JOIN page_views f
ON f.product_id=o.product_id
WHERE
extract (year from order_date) =2019
and extract (month from order_date) =12
and product_category='electronics'
GROUP BY 1, 2 )
SELECT * FROM ranked_products
WHERE pct_rnk <= 0.2