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
分享到:
相关推荐
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》Chapter 7 Advanced Grouping 是一本关于Oracle SQL高级分组技术的专业书籍,其中7.5小节着重讲解了CUBE操作在实际工作中的应用。CUBE是SQL中的一种多维度分析工具,它允许我们在数据分组时生成...
ROLLUP是一种能够生成小计和总计的分组方式。它在标准的GROUP BY分组基础上添加了额外的汇总行。使用ROLLUP时,需要将ROLLUP指定的列按照层级顺序排列,Oracle会从最后一个列开始,逐步向上进行汇总。例如: ```sql...
GROUPING SETS允许你提供一组元组,这些元组定义了要生成的分组。 例如: ```sql SELECT column1, column2, COUNT(*) FROM table GROUP BY GROUPING SETS ((column1), (column2), ()); ``` 上述查询会分别按...
3. GROUPING SETS 子句:GROUPING SETS 子句可以生成多个分组结果,例如: SELECT department, AVG(salary) FROM employees GROUP BY GROUPING SETS(department, (department, job)); 这条语句将返回每个部门的薪资...
CASE WHEN (GROUPING(水果) = 1) THEN '小计' ELSE ISNULL(水果, 'UNKNOWN') END AS 水果, SUM(重量) AS 总重量 FROM tt GROUP BY ROLLUP (产地, 水果); ``` 以上是关于Oracle中GROUP BY, ORDER BY, HAVING以及...
- **使用CUBE、ROLLUP或GROUPING SETS**:这些高级的`GROUP BY`选项可以帮助生成更复杂的汇总数据,例如交叉总计或立方体。 总的来说,`GROUP BY`语句是数据分析和报告的重要工具,理解其工作原理和优化方法对于...
组合集总计是SQL中用于汇总数据的一种方法,通过`GROUP BY`语句配合`ROLLUP`, `CUBE`或`GROUPING SETS`来实现。这些操作可以生成所有可能的分组,包括总和与子总和,帮助我们分析数据的多层次结构。 2. **子查询**...