вычисление верхнего 20-го процентиля в Redshift / SQL

#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