在Oracle中,怎样进行汇总呀???

saiche05 2006-04-05 11:11:04
在sql server中,汇总是用compute来写的
如:
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)
------------------------
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
但是在Oracle中,怎么汇总呀?
...全文
457 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglark 2007-04-04
  • 打赏
  • 举报
回复
没用过,mark
saiche05 2007-04-04
  • 打赏
  • 举报
回复
受益多多!
guoxyj 2006-11-02
  • 打赏
  • 举报
回复
saiche05 2006-11-02
  • 打赏
  • 举报
回复
非常好,谢谢!!!
tete 2006-09-25
  • 打赏
  • 举报
回复
太有用了.学习
cnyxlxw 2006-07-31
  • 打赏
  • 举报
回复
mark mark
龙翔飞雪 2006-07-28
  • 打赏
  • 举报
回复
两个汇总函数: cube, rollup;
三个group函数: grouping(), grouping_id, group_id
设置混合列: grouping sets

基本上自学要全记住很难啦,因为不常, 建议看一下, 等用到时再翻资料查
龙翔飞雪 2006-07-28
  • 打赏
  • 举报
回复
因为汇总函数, 在汇总的记录上,会自动添加null 到汇总的列上..

此时,你就无法判断,这个null值是因为汇总产生的, 还是这列值本身就是null.

所以grouping(col1)会返回1,代表是col1的汇总行, 返回0代表不是col1的汇总行.

参见 Oracle Data Warehousing 的 18. SQL for Aggregation in Data Warehouses
saiche05 2006-07-28
  • 打赏
  • 举报
回复
谢谢!
开发者开聊 2006-04-05
  • 打赏
  • 举报
回复
SELECT decode(GROUPING(empno), 1, '合计', empno) empno, SUM(sal) sal FROM emp t GROUP BY CUBE(empno);
沝林 2006-04-05
  • 打赏
  • 举报
回复
SELECT type, price, advance
FROM titles
group by rollup(type)

示例:
SQL> select deptno,empno,sal from emp;

DEPTNO EMPNO SAL
------ ----- ---------
20 7369 800.00
30 7499 1600.00
30 7521 1250.00
20 7566 2975.00
30 7654 1250.00
30 7698 2850.00
10 7782 2450.00
20 7788 3000.00
10 7839 5000.00
30 7844 1500.00
20 7876 1100.00
30 7900 950.00
20 7902 3000.00
10 7934 1300.00

14 rows selected

SQL> SELECT decode(GROUPING(empno), 1, '合计', empno) empno, SUM(sal) sal FROM emp t GROUP BY ROLLUP(empno);

EMPNO SAL
---------- ----------
7369 800
7499 1600
7521 1250
7566 2975
7654 1250
7698 2850
7782 2450
7788 3000
7839 5000
7844 1500
7876 1100
7900 950
7902 3000
7934 1300
合计 29025

15 rows selected

SQL>
SQL> SELECT decode(grouping_id(deptno, empno), 3, '合计', deptno) deptno,
2 decode(grouping_id(deptno, empno), 1, '小计', empno) empno,
3 SUM(sal) sal
4 FROM emp t
5 GROUP BY ROLLUP(deptno, empno)
6 /

DEPTNO EMPNO SAL
---------- ---------- ----------
10 7782 2450
10 7839 5000
10 7934 1300
10 小计 8750
20 7369 800
20 7566 2975
20 7788 3000
20 7876 1100
20 7902 3000
20 小计 10875
30 7900 950
30 7499 1600
30 7521 1250
30 7654 1250
30 7698 2850
30 7844 1500
30 小计 9400
合计 29025

18 rows selected
saiche05 2006-04-05
  • 打赏
  • 举报
回复
能不能解释一下GROUPING()是什么意思呀???
谢谢!!!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧