您的位置:首页 > 其它

Group分组及其扩展总结(三)

2012-11-04 16:00 260 查看
--1.Grouping_id
--Grouping_id借助having子句可以对记录进行过滤
--将不包含小计或者总计的记录过滤掉
--Grouping_id可以返回一列或者多列,返回Grouping位向量的十进制值
select grouping(a.division_id),
grouping(a.job_id),
grouping_id(a.division_id, a.job_id),
sum(a.salary)
from employees2 a
group by cube(a.division_id, a.job_id)
order by a.division_id, a.job_id

运行结果为:
GROUPING(A.DIVISION_ID)    GROUPING(A.JOB_ID)    GROUPING_ID(A.DIVISION_ID,A.JO    SUM(A.SALARY)
1    0    0    0    530000
2    0    0    0    800000
3    0    0    0    280000
4    0    1    1    1610000
5    0    0    0    245000
6    0    0    0    805000
7    0    0    0    270000
8    0    1    1    1320000
9    0    0    0    4446000
10    0    0    0    490000
11    0    1    1    4936000
12    0    0    0    465000
13    0    0    0    115000
14    0    0    0    435000
15    0    1    1    1015000
16    1    0    2    245000
17    1    0    2    6246000
18    1    0    2    800000
19    1    0    2    115000
20    1    0    2    1475000
21    1    1    3    8881000

--2.Grouping_ID用处在于使用having子句过滤记录,只要控制grouping_id记录的返回值大于零就可以
select case grouping(b.division_id)
when 1 then '所有部门'
else b.division_id
end,
case grouping(b.job_id)
when 1 then '所有工种'
else b.job_id
end,
sum(b.salary),
grouping_id(b.division_id, b.job_id)
from employees2 b
group by cube(b.division_id, b.job_id)
having grouping_id(b.division_id, b.job_id) > 0 --两列或者有一列为空
order by b.division_id, b.job_id

运行结果
CASEGROUPING(B.DIVISION_ID)WHE    CASEGROUPING(B.JOB_ID)WHEN1THE    SUM(B.SALARY)    GROUPING_ID(B.DIVISION_ID,B.JO
1    BUS    所有工种    1610000    1
2    OPE    所有工种    1320000    1
3    SAL    所有工种    4936000    1
4    SUP    所有工种    1015000    1
5    所有部门    ENG    245000    2
6    所有部门    MGR    6246000    2
7    所有部门    PRE    800000    2
8    所有部门    TEC    115000    2
9    所有部门    WOR    1475000    2
10    所有部门    所有工种    8881000    3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: