Oracle:grouping和rollup

Oracle grouping和rollup简单测试

SQL> select department_id,sum(salary) from employees where department_id in(10,30,90,100) group by department_id order by department_id;
DEPARTMENT_ID SUM(SALARY)
------------- -----------
           10        4400
           30       24900
           90       58000
          100       51608

SQL> select department_id,first_name,sum(salary) from employees where department_id in(10,30,90,100) group by (department_id,first_name) order by department_id;
DEPARTMENT_ID FIRST_NAME           SUM(SALARY)
------------- -------------------- -----------
           10 Jennifer                    4400
           30 Alexander                   3100
           30 Den                        11000
           30 Guy                         2600
           30 Karen                       2500
           30 Shelli                      2900
           30 Sigal                       2800
           90 Lex                        17000
           90 Neena                      17000
           90 Steven                     24000
          100 Daniel                      9000
          100 Ismael                      7700
          100 John                        8200
          100 Jose Manuel                 7800
          100 Luis                        6900
          100 Nancy                      12008
16 rows selected

SQL> select department_id,first_name,sum(salary) from employees where department_id in(10,30,90,100) group by rollup(department_id,first_name) order by department_id;
DEPARTMENT_ID FIRST_NAME           SUM(SALARY)
------------- -------------------- -----------
           10 Jennifer                    4400
           10                             4400
           30 Alexander                   3100
           30 Den                        11000
           30 Guy                         2600
           30 Karen                       2500
           30 Shelli                      2900
           30 Sigal                       2800
           30                            24900
           90 Lex                        17000
           90 Neena                      17000
           90 Steven                     24000
           90                            58000
          100 Daniel                      9000
          100 Ismael                      7700
          100 John                        8200
          100 Jose Manuel                 7800
          100 Luis                        6900
          100 Nancy                      12008
          100                            51608
DEPARTMENT_ID FIRST_NAME           SUM(SALARY)
------------- -------------------- -----------
                                        138908
21 rows selected

SQL> select department_id,grouping(department_id),first_name,grouping(first_name),sum(salary) from employees where department_id in(10,30,90,100) group by rollup(department_id,first_name) order by department_id;
DEPARTMENT_ID GROUPING(DEPARTMENT_ID) FIRST_NAME           GROUPING(FIRST_NAME) SUM(SALARY)
------------- ----------------------- -------------------- -------------------- -----------
           10                       0 Jennifer                                0        4400
           10                       0                                         1        4400
           30                       0 Alexander                               0        3100
           30                       0 Den                                     0       11000
           30                       0 Guy                                     0        2600
           30                       0 Karen                                   0        2500
           30                       0 Shelli                                  0        2900
           30                       0 Sigal                                   0        2800
           30                       0                                         1       24900
           90                       0 Lex                                     0       17000
           90                       0 Neena                                   0       17000
           90                       0 Steven                                  0       24000
           90                       0                                         1       58000
          100                       0 Daniel                                  0        9000
          100                       0 Ismael                                  0        7700
          100                       0 John                                    0        8200
          100                       0 Jose Manuel                             0        7800
          100                       0 Luis                                    0        6900
          100                       0 Nancy                                   0       12008
          100                       0                                         1       51608
DEPARTMENT_ID GROUPING(DEPARTMENT_ID) FIRST_NAME           GROUPING(FIRST_NAME) SUM(SALARY)
------------- ----------------------- -------------------- -------------------- -----------
                                    1                                         1      138908
21 rows selected

rollup为按分组统计小计和。
grouping(department_id)和grouping(first_name)
如果当前列所在的行为空,则显示为1,不为空则显示为0;

时间: 2024-10-28 20:11:10

Oracle:grouping和rollup的相关文章

oracle group by rollup decode grouping nvl等判断或者小计合计心得

在做oracle 047第12题时,遇到group by 语句,由此遇到group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPORT等. 1. decode  与if...then,case...when...这类流数据语句功能差不多 decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(值1) ELSIF 条件=值2 THEN RETU

oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO

干oracle 047文章12当问题,经验group by 声明.因此邂逅group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPORT等一下. 1. decode  与if...then,case...when...这类流数据语句功能差点儿相同 decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义例如以下: IF 条件=值1 THEN RETURN(值1) ELSIF 条件=值2 TH

【Teradata】grouping和rollup窗口函数

1.group by后带rollup子句 先按一定的规则产生多种分组,然后返回各个分组所产生的结果集的并集,且没有去掉重复数据(统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数).下面举例说明: 例1:Group by rollup(A ,B) //返回如下3个分组的统计结果集的并集,且未去掉重复数据. 第一种:group by A,B 第二种:group by A 第三种:group by NULL (即没有分组,所有数据做一个统计) 例2:Group by roll

Hive新功能 Cube, Rollup介绍

说明:Hive之cube.rollup,还有窗口函数,在传统关系型数据(Oracle.sqlserver)中都是有的,用法都很相似. GROUPING SETS GROUPING SETS作为GROUP BY的子句,允许开发人员在GROUP BY语句后面指定多个统计选项,可以简单理解为多条group by语句通过union all把查询结果聚合起来结合起来,下面是几个实例可以帮助我们了解, 以acorn_3g.test_xinyan_reg为例: [[email protected] xjob]

oracle 高级分组

oracle 高级分组 博客分类: 数据库基础 oraclesql Java代码   10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生subtotal(小计)的值. 2.使用cube操作产生cross-tabulation(列联交叉表)的值. 3.使用grouping函数标识通过rollup和cube建立的行的值. 4.使用grouping sets产生一个single result set(结果集). 5.使用gr

Oralce 高级 sql 之 rollup 与 cube

在 oracle sql 查询中,oracle 提供了一些高级功能能够简化 sql 查询语句以及提高查询性能.下面将介绍 rollup,cube的用法与区别. 1. rollup rollup 能够在 select 语句中计算指定分组字段的多个层次的小计以及合计. rollup 非常容易使用并且非常高效. rollup 从右到左扫描分组字段, 逐步创建更高级别的小计. 最后再创建一行总计. rollup 将创建 n + 1 个层次(级别)的小计, n 指的是 rollup 中的字段数. 1.1

TSql Grouping Sets

TSql Group by clause主要有4种类型: Group by a,b group by rollup(a,b) group by cube(a,b) group by grouping sets((),(a),(a,b),rollup(a,b),cube(a,b)) rollup 和cube的作用是预定义grouping sets(分组集),rollup(a,b) 预定义的分组集是(),(a),(a,b);cube(a,b)预定义的的分组集是(),(a),(b),(a,b). gr

TSQL 分组集(Grouping Sets)

分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回的select 子句相同,由于select子句只能引用分组列,因此,在单个分组中缺失的分组列,TSQL返回NULL值. TSQL使用 group by 子句分组,有4种不同的语法: group by a,b group by rollup(a,b) group by cube(a,b) group

HANA SQL

约束 注释 你可以给你的 SQL 语句添加注释来增加可读性和可维护性. SQL 语句中注释的分隔如下: l  双连字符“--”.所有在双连字符之后直到行尾的内容都被 SQL 解析器认为是注释. l  “/*”和“*/”.这种类型的注释用来注释多行内容.所有在引号符“/*”和关闭符“*/”之间 的文字都会被 SQL 解析器忽略. 标识符 标识符用来表示 SQL 语句中的名字,包括表名.视图名.同义字.列名.索引名.函数名.存储过程名.用户名.角色名等等.有两种类型的标识符:未分隔标识符和分隔标识符