1

我在 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”功能?

4

2 回答 2

1

您也可以使用聚合函数中的grouping_sets来解决它

它会给你同样的结果

    SELECT market_id,item_id,SUM(sale) FROM Sales
    Group by GROUPING SETS ( (market_id,item_id) , (market_id)(item_id), () );
于 2016-01-26T05:17:23.920 回答
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
于 2016-01-24T15:34:43.630 回答