Group分组及其扩展总结(三)
1 --1.Grouping_id 2 --Grouping_id借助having子句可以对记录进行过滤 3 --将不包含小计或者总计的记录过滤掉 4 --Grouping_id可以返回一列或者多列,返回Grouping位向量的十进制值 5 select grouping(a.division_id), 6 grouping(a.job_id), 7 grouping_id(a.division_id, a.job_id), 8 sum(a.salary) 9 from employees2 a 10 group by cube(a.division_id, a.job_id) 11 order by a.division_id, a.job_id 12 13 运行结果为: 14 GROUPING(A.DIVISION_ID) GROUPING(A.JOB_ID) GROUPING_ID(A.DIVISION_ID,A.JO SUM(A.SALARY) 15 1 0 0 0 530000 16 2 0 0 0 800000 17 3 0 0 0 280000 18 4 0 1 1 1610000 19 5 0 0 0 245000 20 6 0 0 0 805000 21 7 0 0 0 270000 22 8 0 1 1 1320000 23 9 0 0 0 4446000 24 10 0 0 0 490000 25 11 0 1 1 4936000 26 12 0 0 0 465000 27 13 0 0 0 115000 28 14 0 0 0 435000 29 15 0 1 1 1015000 30 16 1 0 2 245000 31 17 1 0 2 6246000 32 18 1 0 2 800000 33 19 1 0 2 115000 34 20 1 0 2 1475000 35 21 1 1 3 8881000 36 37 --2.Grouping_ID用处在于使用having子句过滤记录,只要控制grouping_id记录的返回值大于零就可以 38 select case grouping(b.division_id) 39 when 1 then '所有部门' 40 else b.division_id 41 end, 42 case grouping(b.job_id) 43 when 1 then '所有工种' 44 else b.job_id 45 end, 46 sum(b.salary), 47 grouping_id(b.division_id, b.job_id) 48 from employees2 b 49 group by cube(b.division_id, b.job_id) 50 having grouping_id(b.division_id, b.job_id) > 0 --两列或者有一列为空 51 order by b.division_id, b.job_id 52 53 运行结果 54 CASEGROUPING(B.DIVISION_ID)WHE CASEGROUPING(B.JOB_ID)WHEN1THE SUM(B.SALARY) GROUPING_ID(B.DIVISION_ID,B.JO 55 1 BUS 所有工种 1610000 1 56 2 OPE 所有工种 1320000 1 57 3 SAL 所有工种 4936000 1 58 4 SUP 所有工种 1015000 1 59 5 所有部门 ENG 245000 2 60 6 所有部门 MGR 6246000 2 61 7 所有部门 PRE 800000 2 62 8 所有部门 TEC 115000 2 63 9 所有部门 WOR 1475000 2 64 10 所有部门 所有工种 8881000 3
简单做人 从容做事 快乐生活