ORACLE pl / sql Выходит в тройку самых прибыльных продуктов каждый квартал - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь вывести 3 лучших продукта в квартал, что должно быть 12 строк, так как 3 лучших продукта в квартал. Ближайший вывод представлен ниже, я понятия не имею, как распределить его каждый квартал

SELECT * FROM (SELECT QUARTER, PRODUCT_NAME, SUM(QUANTITY) "QTY_SOLD", SALES, SUM(PROFIT) "PROFIT_GENERATED" FROM DELIVERIES_FACT 
    WHERE EXTRACT(YEAR from SHIP_DATE) = 2015 GROUP BY  QUARTER, PRODUCT_NAME, SALES ORDER BY "PROFIT_GENERATED" DESC)
    WHERE rownum <= 3

получая вывод

enter image description here

enter image description here

1 Ответ

0 голосов
/ 17 мая 2018

Я написал этот SQL, извлекая квартал календаря из SHIP_DATE; Вы можете настроить по мере необходимости.

Точно так же RANK (), ROW_NUMBER () и DENSE_RANK () все разные; Возможно, вы захотите поэкспериментировать с каждой аналитической функцией, чтобы выяснить, какие из них лучше всего соответствуют вашим данным, и как они работают.

SELECT * 
  FROM (SELECT RANK() OVER (PARTITION BY SHIP_QUARTER 
                            ORDER BY PROFIT_GENERATED desc) AS PROFIT_RANK_BY_Q, 
               ORIG.* 
          FROM
               (SELECT EXTRACT(QUARTER from SHIP_DATE) AS SHIP_QUARTER, 
                       PRODUCT_NAME, 
                       SUM(QUANTITY) "QTY_SOLD", SALES, SUM(PROFIT) "PROFIT_GENERATED" 
                  FROM DELIVERIES_FACT 
                 WHERE EXTRACT(YEAR from SHIP_DATE) = 2015 
                 GROUP BY EXTRACT(QUARTER from SHIP_DATE), PRODUCT_NAME, SALES 
               )
       )
 WHERE PROFIT_RANK_BY_Q <= 3
 order by SHIP_QUARTER, PROFIT_RANK_BY_Q
...