【问题标题】:Oracle Quarter SQL Query with top three products前三名产品的 Oracle Quarter SQL 查询
【发布时间】:2016-04-11 19:21:00
【问题描述】:

我正在 Oracle 中从事一个小项目。我需要获得前三名最畅销的产品以及今年以及 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; 

【问题讨论】:

    标签: oracle


    【解决方案1】:

    你可以从这里开始:

      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;
    

    【讨论】:

      【解决方案2】:
      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多