`

oracle group by

 
阅读更多

 

扩展的group by的函数还是要符合group by的相关语法语义规则,比如select中不能直接显示非分组列

 

 

rollup

oracle使用rollup对group by进行扩展,他允许计算标准分组及相应维度的小计合计

 

select  group by rollup(grouping_column_reference_list)

 

先计算标准分组,然后列从右到左递减计算更高一级的小计,一直到列全部被选完,最后计算合计

 

 

 

select  a.dname,b.job,sum(b.sal)

from dept a,emp b 

where a.deptno=b.deptno

group by a.dname,b.job

 

union all

 

select a.dname,null,sum(b.sal) 

from dept a,emp b

where a.deptno=b.deptno

group by a.dname

 

union all

select null,null,sum(b.sal)

from dept a,emp b

where a.deptno=b.deptno;

-------------------------------------

 

 

select a.dname,b.job,sum(b.sal) sum_sal

from dept a,emp b

where a.deptno=b.deptno

group by rollup(a.dname,b.job)

 

 

 

select to_char(b.hiredate,'yyyy') hire_year,a.dname,b.job,sum(b.sal) sum_sal

from dept a,emp b

where a.deptno=b.deptno

group by rollup(to_char(b.hiredate,'yyyy'),a.dname,b.job);

 

 

部分rollup分组

 

 

 

select to_char(b.hiredate,'yyyy') hire_year,a.dname,b.job,sum(b.sal) sum_sal

from dept a,emp b

where a.deptno=b.deptno

group by to_char(b.hiredate,'yyyy'),a.dname, rollup(b.job);

 

rollup中指定n列,分组方式就有n+1种,如果部分rollup可以剔除某些不需要的小计和合计,只要根据需求将相关的列从rollup中移出,放到group by 中即可

 

 

CUBE

可以对不同维度的所有可能分组进行统计,从而生成交叉报表

 

select ----  group by cube(grouping_column_reference_list)

 

select b.job,a.dname,sum(b.sal)

from dept a,emp b

where a.deptno=b.deptno

group by cube(a.dname,b.job)

 

部分cube

 

select a.dname,b.job,sum(b.sal)

from dept a,emp b

where a.deptno=b.deptno

group by a.dname,cube(b.job);

 

cube实现了多维组的分析统计工作

 

grouping sets

只有指定某些维度的小计,没有常规分组结果及合计结果,只对关注某些维度的小计分析很有用

select .... group by grouping sets(grouping_column_reference_list)

 

 

select to_char(b.hiredate,'yyyy') hie_year,a.dname,b.job,sum(b.sal) sum_sal

from dept a,emp b

where a.deptno=b.deptno

group by grouping sets(to_char(b.hiredate,'yyyy'),a.dname,b.job);

 

部分grouping sets

 

select to_char(b.hiredate,'yyyy') hie_year,a.dname,b.job,sum(b.sal) sum_sal

from dept a,emp b

where a.deptno=b.deptno

group by a.dname, grouping sets(to_char(b.hiredate,'yyyy'),b.job);

 

cube ,rollup 作为grouping sets的参数

grouping sets 只对单列进行分组,而不提供合计的功能,如果需要提供合计的功能,那么就可以使用rollup或者cube作为grouping sets的参数

 

select a.dname,b.job,sum(b.sal)

from dept a,emp b

where a.deptno=b.deptno

group by grouping sets(rollup( a.dname),rollup(b.job));

 

 

分享到:
评论

相关推荐

    oracle group by语句实例测试

    Oracle中的`GROUP BY`语句是SQL查询中的关键部分,用于根据一个或多个列对数据进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`等。在本例中,我们看到的`GROUP BY`语句是用来对`test`表中的数据进行...

    处理group by 查询速度慢的问题.docx

    ### 处理GROUP BY 查询速度慢的问题 在实际项目中,由于数据表的记录数量庞大,经常遇到查询速度缓慢的问题。本文将详细记录一次针对GROUP BY查询效率低下的排查及优化过程,希望能够对读者有所帮助。 #### 问题...

    mysql使用GROUP BY分组实现取前N条记录的方法

    本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    本文将深入探讨`ORDER BY`子句在Oracle中的排序机制,以及查询时根据`IN`条件顺序输出的方法。 首先,`ORDER BY`用于指定查询结果的排序方式,可以基于一个或多个列进行升序(ASC)或降序(DESC)排序。然而,...

    Oracle多行记录合并

    SELECT customer_id, LISTAGG(order_item, ', ') WITHIN GROUP (ORDER BY order_item) AS items FROM orders GROUP BY customer_id; ``` 2. **集合操作:** - **`UNION ALL` 或 `UNION`:** 虽然这不是直接的...

    ORACLE 乘积 聚集

    使用自定义聚集函数,实现聚集乘积: 测试select id,fun_multiply(t.value) "乘积" from (select 3 id , 4 value from dual union select 1 id , 1 value from dual union select 1 id , 0 value ...group by id;

    ORACLE去除重复数据方法

    - `(SELECT CONTRACTID, MIN(ALTER_DATE) AS ALTER_DATE FROM AGENT_CHANGE_TABLE GROUP BY CONTRACTID)`:这部分代码的功能是基于`CONTRACTID`分组,为每一组选出最早的`ALTER_DATE`时间,并将这些信息作为临时表`...

    order_by_、group_by_、having的用法

    在SQL查询中,`order_by_`、`group_by_`和`having`是三个非常重要的关键字,它们分别用于不同的数据处理操作。 1. `ORDER BY`:此关键字用于对查询结果进行排序,默认是升序(ASC),也可以指定降序(DESC)。在`...

    Oracle中分组查询group by用法规则详解

    `GROUP BY`是Oracle SQL中用于数据分组的关键语句,常与聚合函数、`HAVING`子句和`ORDER BY`子句一起使用,提供了一种强大方式来分析和汇总数据库中的大量数据。了解并熟练掌握这些用法对于进行复杂的数据分析至关...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM table_name GROUP BY column1; ``` 这将根据`column1`的值对记录进行分组,并用逗号和空格连接每个组内的`column2`。 4. **...

    Oracle基础之group by和聚合函数

    当我们刚开始学Oracle时,见到group by,常常会来个三连问:为什么要用group by?group by应该怎么用?为什么写了group by运行时会提示“不是单组分组函数;不符合group by语法”?面对这些问题,我都胆战心惊了...

    SQL之分组统计和子查询专题

    * GROUP BY子句,它位于WHERE子句之后,ORDER BY子句之前。 * 分组函数可以在没有分组的时候单独使用,可是却不能出现其它的查询字段。 子查询 子查询是一种复杂的查询方式,相当于简单查询 + 限定查询 + 多表查询...

    Oracle练习题

    此查询使用`GROUP BY`子句对每个学生的成绩进行分组,并通过`HAVING`子句过滤出平均成绩大于60的学生。这里的关键是使用`AVG(score)`函数计算每个学生的平均成绩。 ```sql SELECT S#, AVG(score) FROM SC GROUP BY S...

    oracle中使用group by优化distinct

    本篇文章将深入探讨如何利用`GROUP BY`来优化`DISTINCT`查询,以提高SQL查询性能。 首先,我们分析给出的SQL语句,这是一个非常复杂的查询,涉及到多个表的连接(JOIN)以及大量的列选择。`DISTINCT`关键字用在这里...

    oracle_11gR2_08 分组查询GROUP BY,模糊查询LIKE

    在Oracle 11g Release 2数据库管理系统中,掌握分组查询GROUP BY、模糊查询LIKE、连接查询JOIN以及IN()和NOT IN()等查询技术是至关重要的,它们为数据分析师和开发人员提供了强大的数据筛选与汇总能力。以下是对这些...

    《Pro Oracle SQL》Chapter7--7.10GROUP BY Restrictions

    在7.10 GROUP BY Restrictions这一部分,作者深入探讨了在使用GROUP BY子句时的一些限制和注意事项,这对于理解和编写高效、正确的SQL查询至关重要。 1. GROUP BY基础:GROUP BY子句用于将数据集按照一个或多个列...

    清晰解读GroupBy

    ### 清晰解读Group By:理解SQL中的分组与聚合 在数据库查询语言SQL中,`GROUP BY`是一个非常重要的概念,它可以帮助我们对数据进行分组并执行聚合操作,从而得出更有价值的信息。本文将从`GROUP BY`的基础概念出发...

Global site tag (gtag.js) - Google Analytics