如何在oracle中没有“Cube”函数编写查询?

时间:2016-01-24 14:43:17

标签: database oracle data-warehouse rolap

我在Oracle的ROLAP工作,我有这个事实表: 销售(market_id,item_id,销售),我有这个查询:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您也可以使用 grouping_sets 汇总功能

解决此问题

它会给你相同的结果

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