`

oracle的rollup操作---按照小组进行分组,同时求总计

 
阅读更多

rollup配合goup by使用,照小组进行分组,同时求总计。可以提供信息汇总功能(类似于"小计")
ROLLUP在数据统计和报表生成过程中带来极大的便利

 

rollup操作---按GROUP BY ROLLUP()本身是分组统计求和的意思

 

如果是ROLLUP(A, B, C)的话,
首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

 

 


下面是一个简单例子:
1、不使用group by 分组

 查询各部门各职位的工资情况
select   job,deptno,sal  

from   emp

order by job, deptno

 

JOB           DEPTNO            SAL
ANALYST      20              3000.00
ANALYST      20              3000.00    --->group by 之后 ANALYST    20      6000.00

CLERK         10               1300.00
CLERK         20                800.00
CLERK         20               1100.00
CLERK         30               950.00

MANAGER    10               2450.00
MANAGER    20               2975.00
MANAGER    30               2850.00

PRESIDENT 10               5000.00

SALESMAN  30               1250.00
SALESMAN  30               1500.00
SALESMAN  30               1250.00
SALESMAN  30               1600.00

 

2、使用group by 分组
select job,deptno,sum(sal) total_sal  
from emp  
group by rollup(job,deptno);
查询员工表,对各个部门的各个职位进行分组,对工资进行小计和总计

JOB         DEPTNO      TOTAL_SAL
CLERK         10               1300
CLERK         20               1900
CLERK         30                 950
CLERK                             4150

ANALYST      20               6000
ANALYST                        6000

MANAGER     10              2450
MANAGER     20              2975
MANAGER     30              2850
MANAGER                       8275

SALESMAN    30             5600
SALESMAN                     5600 

PRESIDENT   10             5000
PRESIDENT                    5000          -->PRESIDENT职位总计

                                    29025         --->总计

 

如果year不想累加,可以写成
Select year,month,area,sum(total_sale) from SaleOrder group by year, rollup(month,area)
       
Grouping用法

 

Grouping是用来判断当前Column是否是一个合计列,1为yes
Select Decode(Grouping(area),1,'所有地区',area) area,
       Decode(Grouping(month),1,'所有月份',month), sum(money)
From   SaleOrder
Group by RollUp(area,month);

 

--如果是一个合计列,则用Decode把它转为"所有月份" 、'所有地区'

 

 

rollup 如何去掉最后一行的总统计

使用:grouping_id

select   job,deptno,sum(sal)   total_sal   from   emp   group   by   rollup(job,deptno)
having grouping_id(job,deptno)<=1

 

查询的结果就会把最后一行的总计给去掉

 

grouping_id中括号里面的字段和rollup括号里面的字段一致就行
grouping_id是肿么来的?它是oracle的函数,针对rollup和cube的
grouping_id的数字是怎么确定的?
向量值,可以认为是二进值的数,例:grouping_id(a,b,c),如果列a为空就是0 非空为1,列b和列c也一样
结果会得到一个三位数,用二进制转换成十进制就是了,例:a,b,c全是非空,说明这行数据是一个总计,那么就是111
即7,三列就是7,如果是两列自然是11就是3了。
因为Grouping是用来判断当前Column是否是一个合计列,如果是一个合计列,则相应的列会是一个空值

 

 

 

select to_char(to_date(tt.inst_date, 'yyyy-mm-dd'), 'yyyy-mm-dd') as inst_date,
       nvl(c.username, tt.opr_id) as opr_id,
       nvl(l.name, d.card_type) as card_type,
       tt.bat_mchnt_id,
       to_char(sum(tt.txn_amt) / 100, 'fm9999999990.00') as txn_amt,
       count(*) as count
  from (select nvl(m.chnshort,'零星售卡') as bat_mchnt_id,
               t.inst_date,
               t.opr_id,
               t.card_deposit as txn_amt,
               t.card_no
          from t_dtl_author t
         left join t_inf_mchnt m on (t.bat_mchnt_id = m.mchnt_id)
         where ahth_txn_type = '1324'
          and t.mchnt_id <> '000000000000891' AND t.inst_date='20120917'
          ?:1) tt

  left join mnguserinfotb c on (c.operatorcardid = tt.opr_id)
  left join v_inf_card  d on (tt.card_no = d.card_no)
  left join (select distinct (card_type) as card_type, name, mediatype
               from t_cardkind_para) l on (d.card_type = l.card_type)
 group by rollup(tt.inst_date, nvl(c.username, tt.opr_id),
                 nvl(l.name, d.card_type),tt.bat_mchnt_id) 
                
                 
                 
                 
               

分享到:
评论

相关推荐

    前端开源库-rollup-plugin-ignore-import

    `rollup-plugin-ignore-import`就是这样一个工具,它专为前端开发中的Rollup打包器设计,旨在帮助开发者在打包过程中忽略特定的导入模块。这篇文章将深入探讨`rollup-plugin-ignore-import`的核心功能、使用方法以及...

    前端开源库-rollup-plugin-dts

    本文将深入探讨一个与Rollup相关的开源库——`rollup-plugin-dts`,它是用于生成TypeScript类型定义(`.d.ts`)汇总文件的插件。 `rollup-plugin-dts` 是一个专门为Rollup设计的插件,它的主要功能是在编译过程中将...

    前端开源库-rollup-plugin-minify

    最后,运行`rollup -c`命令,Rollup将会根据配置文件进行构建,并利用`rollup-plugin-minify`对输出的JavaScript进行压缩和最小化。 总结来说,`rollup-plugin-minify`是Rollup生态系统中一个强大的工具,它结合了...

    前端开源库-rollup-plugin-env

    `rollup-plugin-env` 是一个专门为Rollup.js设计的插件,它的主要功能是将环境变量注入到Rollup.js的构建流程中。这使得开发者能够在编译时根据环境变量来决定某些特定的配置或代码块是否启用。例如,你可以使用它来...

    前端开源库-rollup-plugin-cpy

    **前端开源库-rollup-plugin-cpy详解** 在前端开发中,构建工具扮演着至关重要的角色,它们帮助我们自动化代码处理、打包和优化。Rollup 是一个流行的选择,它以其模块捆绑器的身份出现,用于创建高效、可维护的...

    前端开源库-rollup-plugin-shebang

    总结来说,“rollup-plugin-shebang”是一个实用的前端开发工具,它扩展了Rollup.js的功能,使开发者能够处理包含Unix样式的shebang的脚本,保证在打包后的可执行文件能按照预期运行。通过合理利用这个插件,你可以...

    前端开源库-rollup-plugin-strip

    **前端开源库-rollup-plugin-strip详解** 在前端开发过程中,我们常常需要构建和优化我们的代码,以便在生产环境中提供最佳的性能和加载速度。`rollup-plugin-strip`就是这样一款用于前端代码优化的开源库,它专门...

    前端开源库-rollup-plugin-legacy

    **前端开源库-rollup-plugin-legacy详解** 在前端开发领域,构建工具的使用至关重要,它们可以帮助我们优化代码、处理依赖关系以及打包应用。Rollup 是一个现代化的JavaScript模块打包器,以其高效的树摇(Tree ...

    rollup-plugin-commonjs, 将CommonJS模块转换为 ES2015.zip

    rollup-plugin-commonjs, 将CommonJS模块转换为 ES2015 rollup-plugin-commonjs 将CommonJS模块转换为 ES6,以便它们可以包含在Rollup包中安装npm install --save-dev rollup-plugin-commonjs用法

    Oracle的Rollup用法

    ROLLUP 子句可以将查询结果按照一个或多个字段进行分组,并且可以生成子总计和总计。 在 Oracle 中,ROLLUP 子句可以与 GROUP BY 子句配合使用,以便对数据进行分组和聚合。ROLLUP 子句可以指定一个或多个字段,...

    Oracle分组函数之ROLLUP的基本用法

    本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...

    rollup-plugin-copy:使用汇总复制文件和文件夹

    yarn add rollup-plugin-copy -D # npm npm install rollup-plugin-copy -D 用法 // rollup.config.js import copy from 'rollup-plugin-copy' export default { input : 'src/index.js' , output : { file : '...

    rollup-plugin-typescript2:具有编译器错误的Typescript汇总插件

    汇总插件类型script2 带有编译器错误...安装# with npmnpm install rollup-plugin-typescript2 typescript tslib --save-dev# with yarnyarn add rollup-plugin-typescript2 typescript tslib --dev用法// rollup.conf

    前端开源库-rollup-plugin-coffee-script

    `rollup-plugin-coffee-script`是一个专为CoffeeScript设计的Rollup插件,它允许开发者在使用Rollup进行模块打包时直接处理CoffeeScript源码。Rollup是一款流行的JavaScript模块打包工具,以其树摇(Tree Shaking)...

    rollup-plugin-sass:一个Rollup插件,用于Rollup和Sass之间的无缝集成

    @ ian-sun / rollup-plugin-sass 一个Rollup插件,用于Rollup和Sass之间的无缝集成。 安装 使用npm: npm install --save-dev @ian-sun/rollup-plugin-sass 用法 创建一个rollup.config.js并导入插件: // rollup...

    rollup-plugin-postcss:Rollup和PostCSS之间的无缝集成

    yarn add postcss rollup-plugin-postcss --dev 用法 v2.0支持汇总v1或更高版本,但它会打印汇总v2中已弃用的警告。 重大变化: v3.0仅支持汇总v2,并且基于捆绑的提取路径将根目录中生成文件的位置定位在汇总v2中...

    前端开源库-rollup-plugin-preprocess

    Rollup-plugin-preprocess 是一个针对 Rollup 构建工具的插件,它旨在帮助开发者在构建前端项目时对源代码进行预处理。Rollup 以其模块捆绑的高效性和灵活性而闻名,而预处理插件的加入则进一步增强了它的功能,允许...

    rollup-plugin-serve:服务像webpack-dev-server这样的汇总包

    汇总插件可用于捆绑销售安装# Rollup v0.60+ and v1+npm install --save-dev rollup-plugin-serve# Rollup v0.59 and belownpm install --save-dev rollup-plugin-serve@0用法// rollup.config.jsimport serve from ...

    WinCEPB60-R3-2009-Update-Rollup-Armv4I.msi补丁包

    在"WinCEPB60-R3-2009-Update-Rollup-Armv4I.msi"这个文件中,".msi"是Microsoft Installer的扩展名,它是Windows系统中用于安装、升级和卸载应用程序的标准格式。用户可以通过运行这个.msi文件来应用这个更新到他们...

    rollup-plugin-html2:汇总插件可将捆绑的文件注入HTML模板

    欢迎您继续开发rollup-plugin-html2。 请与我联系,以在npmjs.org上转让所有权。 汇总插件html2 插件,用于将捆绑的文件注入HTML模板。 该插件的灵感来自和 。 rollup-plugin-html2不会列出输出目录,但会从结果...

Global site tag (gtag.js) - Google Analytics