我在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」功能?
我在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),());