Oracle SQL PERCENT_RANK искажен при двойных значениях?

#sql #oracle

#sql #Oracle

Вопрос:

Добрый день: я пытаюсь определить наилучший способ получить процент от проданных продуктов, которые составляют 80% случаев продаж (и / или долларов). В прошлом году сообщалось о 20%. В этом году я получаю то же самое, но я опасаюсь верить в это, поскольку кажется, что это прямая корреляция между процентом продаж, который мне нужен, и процентом, оставшимся. Например, если я хочу 90% продаж, то я получаю 10% продуктов.

Хотя формулы, похоже, работают в приведенном ниже запросе, мне интересно, искажен ли он из-за двойных значений в случаях продаж. Если бы я должен был добавить 80% случаев продаж, то количество продуктов было бы намного меньше. Но я не знаю, искажен ли запрос из-за этих двойных значений, и это дает мне 80% при более высоком значении. Я также видел, что есть совокупный percent_rank — должен ли я попробовать это?

Вот пример запроса, в котором я пытаюсь выбрать пару вариантов, чтобы получить более разумное значение. Заранее спасибо!

 SELECT
    sales_cases,
    total_sales_cases,
    total_item_count  ,
    NVL(RowNbrCs,0) as RowNbrCs,

    PERCENT_RANK() OVER(PARTITION BY company_id  ORDER BY  (sales_cases / total_sales_cases) ASC )  as Rank_by_Cases ,
    PERCENT_RANK() OVER(PARTITION BY company_id  ORDER BY   (NVL(RowNbrCs,0) / sum(total_sales_cases)) ASC )  as Rank_by_Cases 

FROM (
    SELECT
        company_id  ,
        prod_id ,
        SUM( NVL(sales_cases,0)) ,0)  as sales_cases,
        SUM( NVL(net_sales,0)) ,0)  as net_sales,
        ROUND( SUM(( SUM( NVL(sales_cases,0)) )) OVER(PARTITION BY company_id ),0)  as total_sales_cases,
        ROUND( SUM(( SUM( NVL(net_sales,0)) )) OVER(PARTITION BY company_id ),0)  as total_net_sales,
        ROW_NUMBER() OVER(PARTITION BY company_id  ORDER BY  SUM( NVL(sales_cases,0)) ASC ) as   RowNbrCs,
        ROW_NUMBER() OVER(PARTITION BY case when company_id  ORDER BY  SUM( NVL(net_sales,0)) ASC ) as   RowNbrSls,
        SUM(( COUNT(distinct prod_id) )) OVER() as total_item_count 

    from sales, customer, product
    where << conditions >>
    group by
        company_id  ,   prod_id
)
group by    
    sales_cases ,
    total_sales_cases ,
    total_item_count ,
    RowNbrCs ,
    company_id
order by  RowNbrCs desc