select deptno,job,sum(salary) from users group by deptno,job;
+
select deptno,sum(sal) from emp group by deptno
+
select sum(sal) from emp
=
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
group by rollup---叫group by语句的增强------在报表中用的比较多
group by rollup(a,b)
等价于
group by a,b
+
group by a
+
group by null
break on deptno skip 2
相同部门号仅仅显示一次,
不同的部门号之间跳过2行
set pagesize 30 ---让每列显示30条数据
*******************************************************
SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job);
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
DEPTNO JOB SUM(SAL)
---------- --------- ----------
30 9400
29025
已选择13行。
SQL> break on deptno skip 2
SQL> set pagesize 30
SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job);
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
MANAGER 2450
PRESIDENT 5000
8750
20 CLERK 1900
ANALYST 6000
MANAGER 2975
10875
30 CLERK 950
MANAGER 2850
SALESMAN 5600
9400
29025
已选择13行。
group by rollup(a,b)
相当于
group by a,b
+
group by a
+
group by null
例:
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
先按照不同部门不同职位查出薪资总和显示(deptno,job,sum(sal))
再按照不同部门查出薪资总和显示(deptno,sum(sal))
再查出薪资总和显示(sum(sal))
修改报表格式(只在sqlplus中有效):
break on deptno skip 2
相同的部门号(deptno)只显示一次,不同的部门号跳过两行。
set pagsize 30
让每页显示30条记录。
1.最后一句等于前面三句加起来:
按照部门,不同职位,统计工资总额
同时按照部门统计工资总额,
最后统计工资总额
2.关于报表:
break on deptno skip 2
相同的部门号(deptno)只显示一次,不同的部门号跳过两行。
3.关于页面展示:
set pagsize 30
让每页显示30条记录。
注意:关于这部分,后面集合运算会再次举这个例子
group by语句增强
group by 语句的增强
select deptno,job,sum(sal) from emp group by rollup(dept,job);
group by rollup(a,b)=group by a,b+group by a+group by null
break on depno skip 2
相同的部门号只显示一次,不同的部门号跳过两行
rollup group by 语句的增强
o 相同的部门号就显示一次, 不同的部门号跳过两行,这是sqlplus独有的吧
rollup的意义就是递归嵌套?
group by 语句增强
存疑
group by 后面跟 rollup(a,b)函数 多用于报表
break on deptno skip 2
相同的部门号只显示一次,不同的部门号跳过两行
rollup()
group by rollup(a,b)
相当于
group by a,b
+
group by a
+
group by null
例:
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
先按照不同部门不同职位查出薪资总和显示(deptno,job,sum(sal))
再按照不同部门查出薪资总和显示(deptno,sum(sal))
再查出薪资总和显示(sum(sal))
修改报表格式(只在sqlplus中有效):
break on deptno skip 2; 相同的deptno只显示一次,不同的跳过两行
set pagesize 30;
每页显示30条记录
set pagesize 30
break on deptno skip 2
相同的部门号只显示一次,不同的部门跳过2行。
select deptno,job,sum(sal) from emp group by deptno,job
+
select deptno,sum(sal) from emp group by deptno
+
select sum(sal) from emp
===
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
语法:
group by rollup(a,b)
等价于:
group by a,b
+
group by a
+
group by null
笔记000001
select deptno,job,sum(sal) from emp group by deptno,job
select deptno,sum(sal) from emp group by deptno
select sum(sal) from emp
上面三句语句相加得到以下语句
break on deptno skip 2
--相同的deptno只显示一次,然后跳2行
set pagesize 30 --显示30行
select deptno,job,sum(sal) from emp group by (roolup();
简单的报表实现,统计部门工资,并作出总和
break on deptno skip 2 将相同的部门号不显示,并且跳过两行预留空白
group by 语句增强 例子
group by 语句增强
select deptno, job, sum(sal) from emp group by deptno, job(红色)
select deptno, sum(sal) from emp group by deptno(蓝色)
select sum(sal) from emp (紫色)
===(等价于)
select deptno, job, sum(sal) from emp group by rollup(deptno,job);
上面语句适用于做报表,下面是页面调整相关语句:
break on deptno skip 2(相同的部门号只显示一次,不同的部门号跳过2行)
set pagesize 30(设置页面大小,每页展示30条)