oracle中没有"Cube"函数怎么写查询?
How to write query without "Cube" function in oracle?
我在 Oracle 的 ROLAP 工作,我知道这个事实 Table:
销售(market_id,item_id,销售),我有这个查询:
SELECT market_id,item_id,SUM(sale) FROM Sales
GROUP BY CUBE(market_id,item_id);
是否有另一种方法可以在不使用 "CUBE" 函数的情况下获得相同的结果?
下面的查询等效于带有 CUBE(market_id,item_id) 子句的查询(给出相同的结果集)。
但它会更慢,它会读取 table 4 次 - CUBE 已优化,它只读取 table 一次。
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), () );
我在 Oracle 的 ROLAP 工作,我知道这个事实 Table: 销售(market_id,item_id,销售),我有这个查询:
SELECT market_id,item_id,SUM(sale) FROM Sales
GROUP BY CUBE(market_id,item_id);
是否有另一种方法可以在不使用 "CUBE" 函数的情况下获得相同的结果?
下面的查询等效于带有 CUBE(market_id,item_id) 子句的查询(给出相同的结果集)。
但它会更慢,它会读取 table 4 次 - CUBE 已优化,它只读取 table 一次。
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), () );