如何在oracle中编写没有“Cube”功能的查询?
问题描述:
我在Oracle上ROLAP工作,我有这个事实表: 销售(market_id,ITEM_ID,销售),我有这个疑问:如何在oracle中编写没有“Cube”功能的查询?
SELECT market_id,item_id,SUM(sale) FROM Sales
GROUP BY CUBE(market_id,item_id);
是否有另一种方式来获得相同的结果,但没有使用“CUBE”功能?
答
查询下面的te等同于使用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
答
您还可以通过使用grouping_sets解决它从聚集功能
,它会给你同样的结果
SELECT market_id,item_id,SUM(sale) FROM Sales
Group by GROUPING SETS ((market_id,item_id) , (market_id)(item_id),());