- 浏览: 785770 次
- 性别:
- 来自: 广州
文章分类
最新评论
oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组情况为:
DEPTNO,job,HIREDATE 第 1 种分组 (A,B,C)
DEPTNO,job, 第 2 种分组 (A,B)
DEPTNO 第 3 种分组 (A)
总分一个组
-- 结果如下: 并进行部分数据解释,以便读者理解
DEPTNO JOB TO_CHAR(E1 SUM(SAL) COUNT(SAL)
---------- --------- ---------- ---------- ----------
10 CLERK 1982-01-23 1300 1 (A,B,C) -- 10号部门,CLERK工种,入职日期为1982-01-23,只有一个成员 工资和为:1300
10 CLERK 1300 1 (A,B) -- 10号部门,CLERK工种,只有一个成员 工资和为:1300
10 MANAGER 1981-06-09 2450 1 (A,B,C) -- 与第一条记录相似的分析
10 MANAGER 2450 1 (A,B)
10 PRESIDENT 1981-11-17 5000 1 (A,B,C)
10 PRESIDENT 5000 1 (A,B,C)
10 8750 3 (A) -- 10号部门有3个成员,工资总计为8750
20 CLERK 1980-12-17 800 1
20 CLERK 800 1
20 ANALYST 1981-12-03 3000 1
20 ANALYST 3000 1
20 MANAGER 1981-04-02 2975 1
20 MANAGER 2975 1
20 6775 3
30 CLERK 1981-12-03 950 1
30 CLERK 950 1
30 MANAGER 1981-05-01 2850 1
30 MANAGER 2850 1
30 SALESMAN 1981-02-20 1600 1
30 SALESMAN 1981-02-22 1250 1
30 SALESMAN 1981-09-08 1500 1
30 SALESMAN 1981-09-28 1250 1
30 SALESMAN 5600 4 (A,B) -- 30号部门,SALESMAN工种,有4个成员 工资和为:5600
30 9400 6 (A) -- 30号部 有6个成员, 工资总计为:9400
24925 12 () -- 所有部门工资总和为:24925
*/
--- CUBE , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY CUBE (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组原则:
GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。
-- 结果 : 并进行部分数据解释,以便读者理解
DEPTNO JOB TO_CHAR(E1 SUM(SAL) COUNT(SAL)
---------- --------- ---------- ---------- ----------
24925 12 -- 全表分组,工资总合:24925
1980-12-17 800 1
1981-02-20 1600 1
1981-02-22 1250 1
1981-04-02 2975 1
1981-05-01 2850 1
1981-06-09 2450 1
1981-09-08 1500 1
1981-09-28 1250 1
1981-11-17 5000 1
1981-12-03 3950 2 (C) 1981-12-03 入职的有2位员工,工资总计3950
1982-01-23 1300 1
CLERK 3050 3 (B) CLERK 工种,共计有3位员工,工资总计:3050
CLERK 1980-12-17 800 1
CLERK 1981-12-03 950 1
CLERK 1982-01-23 1300 1
ANALYST 3000 1
ANALYST 1981-12-03 3000 1
MANAGER 8275 3
MANAGER 1981-04-02 2975 1
MANAGER 1981-05-01 2850 1
MANAGER 1981-06-09 2450 1
SALESMAN 5600 4
SALESMAN 1981-02-20 1600 1
SALESMAN 1981-02-22 1250 1
SALESMAN 1981-09-08 1500 1
SALESMAN 1981-09-28 1250 1
PRESIDENT 5000 1
PRESIDENT 1981-11-17 5000 1
10 8750 3
10 1981-06-09 2450 1
10 1981-11-17 5000 1
10 1982-01-23 1300 1
10 CLERK 1300 1
10 CLERK 1982-01-23 1300 1
10 MANAGER 2450 1
10 MANAGER 1981-06-09 2450 1
10 PRESIDENT 5000 1
10 PRESIDENT 1981-11-17 5000 1
20 6775 3 (A) -- 20号部 有3个成员, 工资总计为:6775
20 1980-12-17 800 1
20 1981-04-02 2975 1
20 1981-12-03 3000 1
20 CLERK 800 1
20 CLERK 1980-12-17 800 1
20 ANALYST 3000 1
20 ANALYST 1981-12-03 3000 1
20 MANAGER 2975 1
20 MANAGER 1981-04-02 2975 1
30 9400 6 (A) -- 30号部 有6个成员, 工资总计为:9400
30 1981-02-20 1600 1
30 1981-02-22 1250 1
30 1981-05-01 2850 1
30 1981-09-08 1500 1
30 1981-09-28 1250 1
30 1981-12-03 950 1
30 CLERK 950 1
30 CLERK 1981-12-03 950 1
30 MANAGER 2850 1
30 MANAGER 1981-05-01 2850 1
30 SALESMAN 5600 4 (A、B) 30号部门, SALESMAN 工种,有4 个成员,工资总计:5600
30 SALESMAN 1981-02-20 1600 1
30 SALESMAN 1981-02-22 1250 1
30 SALESMAN 1981-09-08 1500 1 (A、B、C) 0号部门, SALESMAN 工种,1981-09-08入职,1 个员工,工资总计:1500
30 SALESMAN 1981-09-28 1250 1 (A、B、C) 0号部门, SALESMAN 工种,1981-09-28入职,1 个员工,工资总计:1250
已选择65行。
*/
--- GROUPING函数
/*
GROUPING 是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。
语法: GROUPING ( column_name )
是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。
返回类型: int
分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。
*/
-- grouping 样列
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD') HIREDATE,
SUM (SAL),
COUNT (SAL),
GROUPING (E1.DEPTNO) d,
GROUPING (JOB) j,
GROUPING (E1.HIREDATE) h
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
-- 结果 : 并进行部分数据解释,以便读者理解
DEPTNO JOB HIREDATE SUM(SAL) COUNT(SAL) D J H
---------- --------- ---------- ---------- ---------- --- --- ---
10 CLERK 1982-01-23 1300 1 0 0 0 所有列都有数据作为分组,所以全为 0
10 CLERK 1300 1 0 0 1 DEPTNO JOB列 有数据,而HIREDATE没有数据,所以 H 列产生的值为:1
10 MANAGER 1981-06-09 2450 1 0 0 0
10 MANAGER 2450 1 0 0 1
10 PRESIDENT 1981-11-17 5000 1 0 0 0
10 PRESIDENT 5000 1 0 0 1
10 8750 3 0 1 1
20 CLERK 1980-12-17 800 1 0 0 0
20 CLERK 800 1 0 0 1
20 ANALYST 1981-12-03 3000 1 0 0 0
20 ANALYST 3000 1 0 0 1
20 MANAGER 1981-04-02 2975 1 0 0 0
20 MANAGER 2975 1 0 0 1
20 6775 3 0 1 1
30 CLERK 1981-12-03 950 1 0 0 0
30 CLERK 950 1 0 0 1
30 MANAGER 1981-05-01 2850 1 0 0 0
30 MANAGER 2850 1 0 0 1
30 SALESMAN 1981-02-20 1600 1 0 0 0
30 SALESMAN 1981-02-22 1250 1 0 0 0
30 SALESMAN 1981-09-08 1500 1 0 0 0
30 SALESMAN 1981-09-28 1250 1 0 0 0
30 SALESMAN 5600 4 0 0 1
30 9400 6 0 1 1
24925 12 1 1 1
*/
-- 应用 grouping
SELECT CASE
WHEN ( GROUPING (E1.DEPTNO) = 0 AND GROUPING (JOB) = 0 AND GROUPING (HIREDATE) = 0)
THEN DEPTNO|| ' '|| JOB|| ' ' || TO_CHAR (HIREDATE, 'YYYY-MM-DD')|| ' subtotal:'
WHEN ( GROUPING (E1.DEPTNO) = 0 AND GROUPING (JOB) = 0 AND GROUPING (HIREDATE) = 1)
THEN DEPTNO || ' ' || JOB || ' subtotal:'
WHEN ( GROUPING (E1.DEPTNO) = 0 AND GROUPING (JOB) = 1 AND GROUPING (HIREDATE) = 1)
THEN DEPTNO || ' subtotal:'
WHEN ( GROUPING (E1.DEPTNO) = 1 AND GROUPING (JOB) = 1 AND GROUPING (HIREDATE) = 1)
THEN 'Total:'
END
"Total",
SUM (SAL), COUNT (SAL)
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
-- 结果如下:
/*
Total SUM(SAL) COUNT(SAL)
------------------------------------ ---------- ----------
10 CLERK 1982-01-23 subtotal: 1300 1 (A,B,C) 分组
10 CLERK subtotal: 1300 1 (A,B) 分组
10 MANAGER 1981-06-09 subtotal: 2450 1
10 MANAGER subtotal: 2450 1
10 PRESIDENT 1981-11-17 subtotal: 5000 1
10 PRESIDENT subtotal: 5000 1
10 subtotal: 8750 3 (A) 分组 10号部门,共3个成员,工资总计:8750
20 CLERK 1980-12-17 subtotal: 800 1
20 CLERK subtotal: 800 1
20 ANALYST 1981-12-03 subtotal: 3000 1
20 ANALYST subtotal: 3000 1
20 MANAGER 1981-04-02 subtotal: 2975 1
20 MANAGER subtotal: 2975 1
20 subtotal: 6775 3
30 CLERK 1981-12-03 subtotal: 950 1
30 CLERK subtotal: 950 1
30 MANAGER 1981-05-01 subtotal: 2850 1
30 MANAGER subtotal: 2850 1
30 SALESMAN 1981-02-20 subtotal: 1600 1
30 SALESMAN 1981-02-22 subtotal: 1250 1
30 SALESMAN 1981-09-08 subtotal: 1500 1
30 SALESMAN 1981-09-28 subtotal: 1250 1
30 SALESMAN subtotal: 5600 4
30 subtotal: 9400 6
Total: 24925 12 () 全部总计:12 个成员,工资总计为:24925
已选择25行。
*/
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组情况为:
DEPTNO,job,HIREDATE 第 1 种分组 (A,B,C)
DEPTNO,job, 第 2 种分组 (A,B)
DEPTNO 第 3 种分组 (A)
总分一个组
-- 结果如下: 并进行部分数据解释,以便读者理解
DEPTNO JOB TO_CHAR(E1 SUM(SAL) COUNT(SAL)
---------- --------- ---------- ---------- ----------
10 CLERK 1982-01-23 1300 1 (A,B,C) -- 10号部门,CLERK工种,入职日期为1982-01-23,只有一个成员 工资和为:1300
10 CLERK 1300 1 (A,B) -- 10号部门,CLERK工种,只有一个成员 工资和为:1300
10 MANAGER 1981-06-09 2450 1 (A,B,C) -- 与第一条记录相似的分析
10 MANAGER 2450 1 (A,B)
10 PRESIDENT 1981-11-17 5000 1 (A,B,C)
10 PRESIDENT 5000 1 (A,B,C)
10 8750 3 (A) -- 10号部门有3个成员,工资总计为8750
20 CLERK 1980-12-17 800 1
20 CLERK 800 1
20 ANALYST 1981-12-03 3000 1
20 ANALYST 3000 1
20 MANAGER 1981-04-02 2975 1
20 MANAGER 2975 1
20 6775 3
30 CLERK 1981-12-03 950 1
30 CLERK 950 1
30 MANAGER 1981-05-01 2850 1
30 MANAGER 2850 1
30 SALESMAN 1981-02-20 1600 1
30 SALESMAN 1981-02-22 1250 1
30 SALESMAN 1981-09-08 1500 1
30 SALESMAN 1981-09-28 1250 1
30 SALESMAN 5600 4 (A,B) -- 30号部门,SALESMAN工种,有4个成员 工资和为:5600
30 9400 6 (A) -- 30号部 有6个成员, 工资总计为:9400
24925 12 () -- 所有部门工资总和为:24925
*/
--- CUBE , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY CUBE (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组原则:
GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。
-- 结果 : 并进行部分数据解释,以便读者理解
DEPTNO JOB TO_CHAR(E1 SUM(SAL) COUNT(SAL)
---------- --------- ---------- ---------- ----------
24925 12 -- 全表分组,工资总合:24925
1980-12-17 800 1
1981-02-20 1600 1
1981-02-22 1250 1
1981-04-02 2975 1
1981-05-01 2850 1
1981-06-09 2450 1
1981-09-08 1500 1
1981-09-28 1250 1
1981-11-17 5000 1
1981-12-03 3950 2 (C) 1981-12-03 入职的有2位员工,工资总计3950
1982-01-23 1300 1
CLERK 3050 3 (B) CLERK 工种,共计有3位员工,工资总计:3050
CLERK 1980-12-17 800 1
CLERK 1981-12-03 950 1
CLERK 1982-01-23 1300 1
ANALYST 3000 1
ANALYST 1981-12-03 3000 1
MANAGER 8275 3
MANAGER 1981-04-02 2975 1
MANAGER 1981-05-01 2850 1
MANAGER 1981-06-09 2450 1
SALESMAN 5600 4
SALESMAN 1981-02-20 1600 1
SALESMAN 1981-02-22 1250 1
SALESMAN 1981-09-08 1500 1
SALESMAN 1981-09-28 1250 1
PRESIDENT 5000 1
PRESIDENT 1981-11-17 5000 1
10 8750 3
10 1981-06-09 2450 1
10 1981-11-17 5000 1
10 1982-01-23 1300 1
10 CLERK 1300 1
10 CLERK 1982-01-23 1300 1
10 MANAGER 2450 1
10 MANAGER 1981-06-09 2450 1
10 PRESIDENT 5000 1
10 PRESIDENT 1981-11-17 5000 1
20 6775 3 (A) -- 20号部 有3个成员, 工资总计为:6775
20 1980-12-17 800 1
20 1981-04-02 2975 1
20 1981-12-03 3000 1
20 CLERK 800 1
20 CLERK 1980-12-17 800 1
20 ANALYST 3000 1
20 ANALYST 1981-12-03 3000 1
20 MANAGER 2975 1
20 MANAGER 1981-04-02 2975 1
30 9400 6 (A) -- 30号部 有6个成员, 工资总计为:9400
30 1981-02-20 1600 1
30 1981-02-22 1250 1
30 1981-05-01 2850 1
30 1981-09-08 1500 1
30 1981-09-28 1250 1
30 1981-12-03 950 1
30 CLERK 950 1
30 CLERK 1981-12-03 950 1
30 MANAGER 2850 1
30 MANAGER 1981-05-01 2850 1
30 SALESMAN 5600 4 (A、B) 30号部门, SALESMAN 工种,有4 个成员,工资总计:5600
30 SALESMAN 1981-02-20 1600 1
30 SALESMAN 1981-02-22 1250 1
30 SALESMAN 1981-09-08 1500 1 (A、B、C) 0号部门, SALESMAN 工种,1981-09-08入职,1 个员工,工资总计:1500
30 SALESMAN 1981-09-28 1250 1 (A、B、C) 0号部门, SALESMAN 工种,1981-09-28入职,1 个员工,工资总计:1250
已选择65行。
*/
--- GROUPING函数
/*
GROUPING 是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。
语法: GROUPING ( column_name )
是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。
返回类型: int
分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。
*/
-- grouping 样列
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD') HIREDATE,
SUM (SAL),
COUNT (SAL),
GROUPING (E1.DEPTNO) d,
GROUPING (JOB) j,
GROUPING (E1.HIREDATE) h
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
-- 结果 : 并进行部分数据解释,以便读者理解
DEPTNO JOB HIREDATE SUM(SAL) COUNT(SAL) D J H
---------- --------- ---------- ---------- ---------- --- --- ---
10 CLERK 1982-01-23 1300 1 0 0 0 所有列都有数据作为分组,所以全为 0
10 CLERK 1300 1 0 0 1 DEPTNO JOB列 有数据,而HIREDATE没有数据,所以 H 列产生的值为:1
10 MANAGER 1981-06-09 2450 1 0 0 0
10 MANAGER 2450 1 0 0 1
10 PRESIDENT 1981-11-17 5000 1 0 0 0
10 PRESIDENT 5000 1 0 0 1
10 8750 3 0 1 1
20 CLERK 1980-12-17 800 1 0 0 0
20 CLERK 800 1 0 0 1
20 ANALYST 1981-12-03 3000 1 0 0 0
20 ANALYST 3000 1 0 0 1
20 MANAGER 1981-04-02 2975 1 0 0 0
20 MANAGER 2975 1 0 0 1
20 6775 3 0 1 1
30 CLERK 1981-12-03 950 1 0 0 0
30 CLERK 950 1 0 0 1
30 MANAGER 1981-05-01 2850 1 0 0 0
30 MANAGER 2850 1 0 0 1
30 SALESMAN 1981-02-20 1600 1 0 0 0
30 SALESMAN 1981-02-22 1250 1 0 0 0
30 SALESMAN 1981-09-08 1500 1 0 0 0
30 SALESMAN 1981-09-28 1250 1 0 0 0
30 SALESMAN 5600 4 0 0 1
30 9400 6 0 1 1
24925 12 1 1 1
*/
-- 应用 grouping
SELECT CASE
WHEN ( GROUPING (E1.DEPTNO) = 0 AND GROUPING (JOB) = 0 AND GROUPING (HIREDATE) = 0)
THEN DEPTNO|| ' '|| JOB|| ' ' || TO_CHAR (HIREDATE, 'YYYY-MM-DD')|| ' subtotal:'
WHEN ( GROUPING (E1.DEPTNO) = 0 AND GROUPING (JOB) = 0 AND GROUPING (HIREDATE) = 1)
THEN DEPTNO || ' ' || JOB || ' subtotal:'
WHEN ( GROUPING (E1.DEPTNO) = 0 AND GROUPING (JOB) = 1 AND GROUPING (HIREDATE) = 1)
THEN DEPTNO || ' subtotal:'
WHEN ( GROUPING (E1.DEPTNO) = 1 AND GROUPING (JOB) = 1 AND GROUPING (HIREDATE) = 1)
THEN 'Total:'
END
"Total",
SUM (SAL), COUNT (SAL)
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
-- 结果如下:
/*
Total SUM(SAL) COUNT(SAL)
------------------------------------ ---------- ----------
10 CLERK 1982-01-23 subtotal: 1300 1 (A,B,C) 分组
10 CLERK subtotal: 1300 1 (A,B) 分组
10 MANAGER 1981-06-09 subtotal: 2450 1
10 MANAGER subtotal: 2450 1
10 PRESIDENT 1981-11-17 subtotal: 5000 1
10 PRESIDENT subtotal: 5000 1
10 subtotal: 8750 3 (A) 分组 10号部门,共3个成员,工资总计:8750
20 CLERK 1980-12-17 subtotal: 800 1
20 CLERK subtotal: 800 1
20 ANALYST 1981-12-03 subtotal: 3000 1
20 ANALYST subtotal: 3000 1
20 MANAGER 1981-04-02 subtotal: 2975 1
20 MANAGER subtotal: 2975 1
20 subtotal: 6775 3
30 CLERK 1981-12-03 subtotal: 950 1
30 CLERK subtotal: 950 1
30 MANAGER 1981-05-01 subtotal: 2850 1
30 MANAGER subtotal: 2850 1
30 SALESMAN 1981-02-20 subtotal: 1600 1
30 SALESMAN 1981-02-22 subtotal: 1250 1
30 SALESMAN 1981-09-08 subtotal: 1500 1
30 SALESMAN 1981-09-28 subtotal: 1250 1
30 SALESMAN subtotal: 5600 4
30 subtotal: 9400 6
Total: 24925 12 () 全部总计:12 个成员,工资总计为:24925
已选择25行。
*/
发表评论
-
Oracle 10g 的clusterware 32位 下载地址
2013-04-19 23:03 1212Oracle 10g 的clusterware 32位 下载地 ... -
oracle 分析函数 RANK()
2013-04-11 00:05 1099RANK()既是一个聚合函数,也是一个分析函数 其具体的语法 ... -
oracle 分析函数
2013-04-09 23:25 1174分析函数是用于计算一组中多行的聚合值,与聚合函数的区别在于聚合 ... -
批量执行 bulk collect与forall用法
2013-04-08 23:49 1394BULK COLLECT 子句会批量检 ... -
pl/sql集合类型
2013-03-26 10:12 1573--集合类型 /* 单行单列的数据,使用标量变量 单行 ... -
oracle 行链接与行迁移
2013-03-16 01:06 1105表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放 ... -
oracle Health Monitor
2013-01-20 00:02 1611About Health Monitor Beginning ... -
oracle moving window size与 AWR retention period关系
2013-01-19 15:58 8486转自: http://tomszrp.itpub.net/po ... -
Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX
2013-01-12 00:20 2914insert提示IGNORE_ROW_ON_DUPKEY_IN ... -
oracle 11g新特性Flashback data archive
2013-01-09 22:52 30871. 什么是flashback data archive F ... -
RMAN List和report 命令
2012-12-25 00:07 2898LIST 命令 使用RMAN LIST 命令显示有关资料档案库 ... -
oracle ASM中ASM_POWER_LIMIT参数
2012-12-24 23:46 6430ASM_POWER_LIMIT 该初始化参数用于指定ASM例程 ... -
oracle I/O 从属进程
2012-12-24 23:24 1424I/O 从属进程 I/O从 ... -
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
2012-12-19 23:43 5640用easy connect连接出现“tns无法解析指定的连接标 ... -
Flashback Database --闪回数据库
2012-12-19 23:38 1392Flashback 技术是以Undo segment中的内容为 ... -
Oracle 11g新特性:Automatic Diagnostic Repository
2012-12-19 22:35 1395Oracle Database 11g的FDI(Fault D ... -
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
2012-12-19 22:09 2698RMAN配置中通道(CHANNEL)相 ... -
oracle 空间RESUMABLE
2012-12-14 22:05 3061空间RESUMABLE操作 转 Oracle从9i开始 ... -
oracle 创建视图 with check option
2012-12-13 23:14 1528我们来看下面的例子: create or replace vi ... -
flashback transaction闪回事务查询
2012-11-26 22:00 1505闪回事务查询有别于闪回查询的特点有以下3个: (1) ...
相关推荐
本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY的一个扩展,它允许你生成一个包含不同层次的分组结果,从最细粒度的分组到最粗粒度的分组,类似于数据...
在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们将详细介绍这三个概念的原理、语法以及...
当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...
`CUBE`和`ROLLUP`是`WITH`子句中的两个特殊运算符,它们主要用于多维度数据分析和聚合操作,通常在`GROUP BY`语句中配合使用。 1. **CUBE运算符**: `CUBE`生成的结果集包含了所有可能的子集,即所选列中值的所有...
GROUP BY 子句(rollup, cube, grouping sets)实例说明 GROUP BY 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY...
Oracle 的 Rollup 用法是指在 SQL 语句中使用 ROLLUP 子句来对数据进行聚合和分组。ROLLUP 子句可以将查询结果按照一个或多个字段进行分组,并且可以生成子总计和总计。 在 Oracle 中,ROLLUP 子句可以与 GROUP BY ...
### Oracle中的ROLLUP与CUBE使用详解 在Oracle数据库中,`ROLLUP`与`CUBE`是非常重要的分组函数,被广泛应用于数据汇总、数据分析等场景中。这两个功能可以帮助开发人员快速地对数据进行多维度分析,是开发人员必备...
### rollup、cube、grouping sets()的理解及应用 在SQL查询中,当我们需要对数据进行多维度的分组统计时,经常会用到`GROUP BY`子句来完成这一任务。而在更复杂的场景下,为了方便地处理多级别的汇总数据,SQL提供...
### Oracle中的Grouping功能详解 在Oracle数据库中,`GROUPING`函数被广泛应用于复杂的分组查询之中,尤其是在存储过程的开发中。本文将详细解释`GROUPING`函数的使用方法及其应用场景,并通过一个示例来帮助理解其...
下面将详细介绍这两者的工作原理以及如何在实际查询中使用它们。 ### GROUPING `GROUPING` 函数用于标识每个汇总行是否属于特定的分组级别。它返回一个数值结果,其中: - 0 表示该列参与了当前的分组。 - 1 表示...
与`GROUP BY ROLLUP`和`GROUP BY CUBE`相比,`GROUPING SETS`更具有选择性,可以精确地控制生成的汇总组。`ROLLUP`生成所有可能的子集,而`CUBE`则生成所有可能的组合,这两者可能会产生大量的结果,尤其是在处理多...
本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...
在使用`CUBE`或`ROLLUP`时,为了区分哪些字段被分组了,哪些没有被分组,通常会使用`GROUPING`函数。`GROUPING`函数会根据其参数是否被分组返回一个值:如果参数未被分组,则返回0;如果参数被分组,则返回1。 **...
然而,GROUP BY还可以与GROUPING、ROLLUP和CUBE运算符结合使用,以实现更复杂的多维度汇总功能。这些高级的汇总方法在数据分析和报表生成中非常有用,尤其是在处理大型数据集时。 GROUPING运算符主要用于识别汇总行...
### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...
本文主要探讨如何利用SQL中的`ROLLUP`函数来实现这一功能,特别关注于Oracle数据库环境下的实现方法。 #### 一、基本概念介绍 `ROLLUP`是一个用于GROUP BY子句的扩展选项,它能够帮助我们生成包含不同层级汇总信息...
SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...
在7_11_os.sql和7_12_os.sql这两个文件中,我们可以预期它们包含了示例查询和数据,用于演示如何在实际环境中使用CUBE。通常,这样的脚本会展示如何构建CUBE查询,以及如何解释和理解返回的结果。通过运行这些脚本,...
NULL 博文链接:https://wangjingyi.iteye.com/blog/1545090