Oracle分组小计、总计示例(grouping sets的使用)

1.首先创建一个表

Sql代码

create table TE
(
  ID        VARCHAR2(2),
  T_CODE    VARCHAR2(4),
  T_NAME    VARCHAR2(4),
  T_AMOUNT  INTEGER,
  T_DEPT    VARCHAR2(4),
  T_PROJECT VARCHAR2(4),
  T_TYPE    VARCHAR2(1)
)

 


2.录入数据如下:

 

 

Sql代码

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('1', '1', '1', 10, '总部', '90', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('2', '2', '2', 20, '总部', '70', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('3', '3', '3', 30, '分1', '60', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('4', '4', '4', 40, '分1', '50', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('5', '5', '5', 50, '分2', '40', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('6', '6', '6', 60, '分2', '30', '0');

 


3.查询全表查看

 

  1. select * from te;





    4.用t.t_dept, t.t_project进行分组查询
     

Sql代码

select t.t_dept, t.t_project, sum(t.t_amount) from te t
group by t.t_dept, t.t_project;

 


结果如下:



5.用t.t_dept, t.t_project,并使用t.t_dept来做小计

 

 

Sql代码

select t.t_dept, t.t_project, sum(t.t_amount) from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept);

 


结果如下: 

 

6.用t.t_dept, t.t_project,并使用t.t_dept来做小计,并做一次总计

 

 

Sql代码

select t.t_dept, t.t_project, sum(t.t_amount) from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept, null);

 


结果如下:






7.使用grouping(字段)

 

 

Sql代码

select grouping(t.t_dept),t.t_dept, t.t_project, sum(t.t_amount) from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept, null);




结果如下:



注意: 在存储过程中null不会正确执行 需要改成()

Sql代码

select grouping(t.t_dept),t.t_dept, t.t_project, t.t_type, sum(t.t_amount) from te t   
group by grouping sets ((t.t_dept, t.t_project,t.t_type), (t.t_dept,t.t_project),t.t_dept, ()); 

 


 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值