Oracle季度SQL查询与前三大产品

Oracle季度SQL查询与前三大产品,oracle,Oracle,我在甲骨文公司做一个小项目。我需要得到今年以及4月至6月、7月至9月、10月至12月和1月至3月四个季度中最畅销的三种产品及其销售总额。我已经找到了第一部分,我只是需要帮助获得每种产品的4个季度总数。希望有人能帮忙,谢谢 这是迄今为止使用的SQL命令: select * from ( select "FACTQUANTITY"."PRODUCTID" as "PRODUCTID", "DIMPRODUCT"."PRODUCTNAME" as "PRODUCTNAME

我在甲骨文公司做一个小项目。我需要得到今年以及4月至6月、7月至9月、10月至12月和1月至3月四个季度中最畅销的三种产品及其销售总额。我已经找到了第一部分,我只是需要帮助获得每种产品的4个季度总数。希望有人能帮忙,谢谢

这是迄今为止使用的SQL命令:

select * from (
  select   "FACTQUANTITY"."PRODUCTID" as "PRODUCTID",
           "DIMPRODUCT"."PRODUCTNAME" as "PRODUCTNAME",
           sum(FACTQUANTITY.QUANTITY) as "QUANTITY" 
  from     "FACTQUANTITY" "FACTQUANTITY",
           "DIMPRODUCT" "DIMPRODUCT" 
  where    "DIMPRODUCT"."PRODUCTID"="FACTQUANTITY"."PRODUCTID" 
  group by FACTQUANTITY.PRODUCTID,
           DIMPRODUCT.PRODUCTNAME
  order by sum(FACTQUANTITY.QUANTITY) desc
)
WHERE ROWNUM <= 3; 

你可以从这里开始:

  select     
     trunc(fact_table.date_column,'Q') as quarter,
    "FACTQUANTITY"."PRODUCTID" ,
    "DIMPRODUCT"."PRODUCTNAME",
     sum(FACTQUANTITY.QUANTITY) as "QUANTITY" 
  from   "FACTQUANTITY" JOIN "DIMPRODUCT" 
       ON "DIMPRODUCT"."PRODUCTID"="FACTQUANTITY"."PRODUCTID" 
  group by 
      FACTQUANTITY.PRODUCTID, DIMPRODUCT.PRODUCTNAME,   trunc(fact_table.date_column,'Q')

    ;
随后,您可以:

with a as (<previous query>)
select * 
from (
  select 
       quarter, 
       productid, 
       productname, 
       quantity,
       row_number() over (partition by quarter order by quantity desc) rnk
  from a
  )
where rnk <= 3;
SELECT *
FROM   (
  SELECT *,
         ROW_NUMBER() OVER ( PARTITION BY quarter
                             ORDER BY quantity DESC, PRODUCTNAME ASC ) AS rn
  FROM   (
    SELECT   TRUNC( f.datetime, 'Q' ) AS quarter,
             f.PRODUCTID,
             d.PRODUCTNAME,
             sum(f.QUANTITY) AS QUANTITY
    FROM     FACTQUANTITY f
             INNER JOIN
             DIMPRODUCT d
             ON ( d.PRODUCTID = f.PRODUCTID )
    GROUP BY TRUNC( f.datetime, 'Q' ),
             FACTQUANTITY.PRODUCTID,
             DIMPRODUCT.PRODUCTNAME
  )
)
WHERE rn <= 3;