`
cd0281
  • 浏览: 125414 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

oracle分组小计,总计样例(grouping sets)

阅读更多
1.首先创建一个表
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.录入数据如下:
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.查询全表查看
select * from te;





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

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来做小计

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来做小计,并做一次总计

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(字段)

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);



结果如下:






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

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

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

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

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

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



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, null);







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


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, ());


完!
  • 大小: 27.9 KB
  • 大小: 18.2 KB
  • 大小: 23.1 KB
  • 大小: 25.8 KB
  • 大小: 33.6 KB
  • 大小: 71.7 KB
分享到:
评论

相关推荐

    Oracle分组统计

    WHEN GROUPING(te.t_project) = 1 THEN '小计' ELSE t_project END, SUM(te.t_amount) FROM te GROUP BY GROUPING SETS ((t_project, t_dept), (t_dept)); ``` 这条语句将对 te 表中的数据进行多级分组...

    《Pro Oracle SQL》Chapter7 Advanced Grouping -- 7.5Putting CUBE To Work

    《Pro Oracle SQL》Chapter 7 Advanced Grouping 是一本关于Oracle SQL高级分组技术的专业书籍,其中7.5小节着重讲解了CUBE操作在实际工作中的应用。CUBE是SQL中的一种多维度分析工具,它允许我们在数据分组时生成...

    oracle综合

    ROLLUP是一种能够生成小计和总计的分组方式。它在标准的GROUP BY分组基础上添加了额外的汇总行。使用ROLLUP时,需要将ROLLUP指定的列按照层级顺序排列,Oracle会从最后一个列开始,逐步向上进行汇总。例如: ```sql...

    ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句

    GROUPING SETS允许你提供一组元组,这些元组定义了要生成的分组。 例如: ```sql SELECT column1, column2, COUNT(*) FROM table GROUP BY GROUPING SETS ((column1), (column2), ()); ``` 上述查询会分别按...

    Oracle聚合函数及其扩展使用

    3. GROUPING SETS 子句:GROUPING SETS 子句可以生成多个分组结果,例如: SELECT department, AVG(salary) FROM employees GROUP BY GROUPING SETS(department, (department, job)); 这条语句将返回每个部门的薪资...

    oracle 入门

    CASE WHEN (GROUPING(水果) = 1) THEN '小计' ELSE ISNULL(水果, 'UNKNOWN') END AS 水果, SUM(重量) AS 总重量 FROM tt GROUP BY ROLLUP (产地, 水果); ``` 以上是关于Oracle中GROUP BY, ORDER BY, HAVING以及...

    oracle group by语句实例测试

    - **使用CUBE、ROLLUP或GROUPING SETS**:这些高级的`GROUP BY`选项可以帮助生成更复杂的汇总数据,例如交叉总计或立方体。 总的来说,`GROUP BY`语句是数据分析和报告的重要工具,理解其工作原理和优化方法对于...

    Oracle学习笔记(五)

    组合集总计是SQL中用于汇总数据的一种方法,通过`GROUP BY`语句配合`ROLLUP`, `CUBE`或`GROUPING SETS`来实现。这些操作可以生成所有可能的分组,包括总和与子总和,帮助我们分析数据的多层次结构。 2. **子查询**...

Global site tag (gtag.js) - Google Analytics