RollUP
来源:互联网 发布:java cgi 编辑:程序博客网 时间:2024/05/01 05:55
如果想要得到每个地区每个月的销售金额,可以使用Group By ,如下:
SELECT R.NAME REGION,
TO_CHAR(TO_DATE(O.MONTH, 'MM'), 'Month') MONTH, SUM(O.TOT_SALES)
FROM ORDERS O, REGION R
WHERE R.REGION_ID = O.REGION_ID
GROUP BY R.NAME, O.MONTH;
但是有的时候我们希望能同时得到每个月所有地区的总金额,通常会使用Union:
SELECT R.NAME REGION,
TO_CHAR(TO_DATE(O.MONTH, 'MM'), 'Month') MONTH, SUM(O.TOT_SALES)
FROM ORDERS O, REGION R
WHERE R.REGION_ID = O.REGION_ID
GROUP BY R.NAME, O.MONTH
UNION ALL
SELECT R.NAME REGION, NULL, SUM(O.TOT_SALES)
FROM ORDERS O, REGION R
WHERE R.REGION_ID = O.REGION_ID
GROUP BY R.NAME
UNION ALL
SELECT NULL, NULL, SUM(O.TOT_SALES)
FROM ORDERS O, REGION R
WHERE R.REGION_ID = O.REGION_ID;
但是一般使用Union的情况下,察看执行计划会发现消耗较大。
这个时候就轮到ROLLUP出场了:
SELECT R.NAME REGION,
TO_CHAR(TO_DATE(O.MONTH, 'MM'), 'Month') MONTH, SUM(O.TOT_SALES)
FROM ORDERS O, REGION R
WHERE R.REGION_ID = O.REGION_ID
GROUP BY ROLLUP (R.NAME, O.MONTH);
当然根据需求的不同可以使用如下:
SELECT O.YEAR, TO_CHAR(TO_DATE(O.MONTH, 'MM'), 'Month') MONTH,
R.NAME REGION, SUM(O.TOT_SALES)
FROM ORDERS O, REGION R
WHERE R.REGION_ID = O.REGION_ID
AND O.MONTH BETWEEN 1 AND 3
GROUP BY O.YEAR, O.MONTH ROLLUP (R.NAME);
局部RollUp
- RollUP
- groupby rollup
- Rollup & Cube
- SqlServer-ROLLUP
- ROLLUP&CUBE
- ROLLUP函数
- ROLLUP & CUBE
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【ROLLUP】Oracle分组函数之ROLLUP魅力
- 【Rollup】浅谈Oracle中的Rollup分组函数
- ROLLUP和CUBE
- 意大利胜利了
- 法国,无语了 意大利,赢了
- 初来乍到,请多多指教!
- C/C++编程日志
- 最近总是不想来上班
- RollUP
- 表单验证时间方法例子
- 浮点数精确运算的分析和解决办法
- Javascript的函数
- ASP.NET 2.0 中实现跨页提交
- Cube
- 简单的Hibernate入门简介
- 女人的眼泪
- 如何让API回调你的VC类成员函数而不是静态函数