【问题标题】:How to write query without "Cube" function in oracle?如何在 oracle 中编写没有“Cube”功能的查询?
【发布时间】:2016-01-24 14:43:17
【问题描述】:

我在 ROLAP on Oracle 工作,我有这个事实表: Sales(market_id,item_id,sale),我有这个查询:

SELECT market_id,item_id,SUM(sale) FROM Sales
GROUP BY CUBE(market_id,item_id);

是否有另一种方法可以获得相同的结果但不使用“CUBE”功能?

【问题讨论】:

    标签: database oracle data-warehouse rolap


    【解决方案1】:

    以下查询等效于带有 CUBE(market_id,item_id) 子句的查询(给出相同的结果集)。
    但它会更慢,它会读表 4 次 - CUBE 已优化,它只读表一次。

    SELECT market_id,item_id,SUM(sale) 
    FROM Sales
    GROUP BY market_id,item_id
    UNION ALL
    SELECT market_id,NULL,SUM(sale) 
    FROM Sales
    GROUP BY market_id,NULL
    UNION ALL
    SELECT NULL,item_id,SUM(sale) FROM Sales
    GROUP BY NULL,item_id
    UNION ALL
    SELECT NULL, NULL,SUM(sale) 
    FROM Sales
    GROUP BY NULL, NULL
    

    【讨论】:

      【解决方案2】:

      您也可以使用 grouping_sets From Aggregation Function

      来解决它

      它会给你同样的结果

          SELECT market_id,item_id,SUM(sale) FROM Sales
          Group by GROUPING SETS ( (market_id,item_id) , (market_id)(item_id), () );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 2019-12-16
        相关资源
        最近更新 更多