`
cd0281
  • 浏览: 123168 次
  • 性别: 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中用GROUPING SETS分组自定义汇总

    为了获取多级或自定义的汇总,我们可以使用`GROUPING SETS`功能,它提供了更灵活的分组方式,同时避免了不必要的计算,提高了SQL查询的效率。 `GROUP BY GROUPING SETS`允许我们自定义想要的汇总级别,从而得到特定...

    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 表中的数据进行多级分组...

    GROUP BY子句(rollup,cube,grouping sets)实例说明

    GROUP BY 子句(rollup, ...GROUP BY 语句用于基本的分组,GROUP BY ROLLUP 语句用于生成所有可能的分组结果,GROUP BY CUBE 语句用于生成所有可能的组合结果,GROUP BY GROUPING SETS 语句用于生成指定的分组结果。

    rollup,cube,grouping sets()的个人理解

    `GROUPING SETS()`则允许指定一组分组集,即可以选择性地返回某些分组的汇总结果,而不是像`ROLLUP`那样按列顺序生成所有可能的汇总行,也不是像`CUBE`那样生成所有可能的分组组合。 **示例代码分析**: ```sql ...

    grouping or grouping_id in ORACLE

    在Oracle数据库中,`GROUPING` 和 `GROUPING_ID` 是两种非常有用的函数,它们能够帮助用户更好地理解和组织聚合查询的结果。这两种函数主要用于处理复杂的分组情况,尤其是在使用`ROLLUP` 或 `CUBE` 时更为显著。...

    oracle 分组函数

    6. GROUPING SETS, CUBE, ROLLUP:这些是更高级的分组功能,可以生成多个分组组合,用于多维数据分析。 三、使用注意事项 1. 分组函数不能与非分组列一起出现在SELECT语句的非聚合表达式中,除非该列被包含在`...

    rollup cube grouping sets的用法

    在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们将详细介绍这三个概念的原理、语法以及...

    oracle中的grouping

    - **GROUP BY GROUPING SETS((expr1, expr2, ...), (expr3, expr4, ...))**:创建指定的分组集。 #### 三、`GROUPING`函数的实际应用 为了更好地理解`GROUPING`函数的应用场景,我们可以通过一个具体的例子来进行...

    用SQL实现统计报表中的小计与合计的方法详解

    在SQL中,生成统计报表,特别是包含小计与合计的部分,是常见的需求。...如果需要优化,可以考虑进一步调整代码以减少内存消耗,或者考虑使用其他方法,如GROUPING SETS或ROLLUP,取决于数据库系统版本的支持情况。

    《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中的一种多维度分析工具,它允许我们在数据分组时生成...

    extJs grouping分组源码

    extJs grouping分组源码 类似qq分组功能

    sql学习 grouping sets 之另一需求展现.sql

    sql学习 grouping sets 之另一需求展现.sql

    精通Oracle10编程

    《精通Oracle10编程》是一本深入探讨Oracle数据库10g版本编程的参考资料,适合对数据库有基础了解并希望进一步提升Oracle技术的读者。Oracle作为全球广泛使用的大型关系型数据库管理系统,其10g版本在功能和性能上都...

    详解SQL中Groupings Sets 语句的功能和底层实现逻辑.doc

    在SQL查询中,Grouping Sets是一种高级的分组方法,它允许用户一次性执行多个不同的分组操作,而不需要写多个独立的GROUP BY语句。这个功能在数据分析和在线分析处理(OLAP)中非常有用,因为它能高效地生成汇总数据...

    使用ROLLUP函数生成报表的小计、合计

    在数据库查询操作中,经常需要对数据进行分组统计,并在此基础上进一步生成包含小计和总计的报表。这种需求在人力资源管理系统(如文中提到的eHR系统)以及其他各类业务系统中非常常见。本文主要探讨如何利用SQL中的...

    使用SQL实现小计,合计以及排序

    首先,小计通常是指在某个特定分类或分组下的总和,而合计则是指所有数据的总和。在SQL中,我们可以通过`GROUP BY`语句来实现分组,然后使用聚合函数`SUM()`来计算每个组的总和,即小计。例如,在提供的代码中,`...

    java1.8 中 stream 的 groupingBy 最大值、最小值分组

    主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组、最小值分组、平均值分组、统计分组

    group by的扩展

    group by扩展包括 rollup、cube、grouping、grouping sets的用法和说明

    lucene-grouping-3.5.0.jar分组统计+分类统计插件

    lucene-grouping-3.5.0.jar分组统计+分类统计插件 分组统计+分类统计

Global site tag (gtag.js) - Google Analytics