`
T240178168
  • 浏览: 367318 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

谈GROUP BY 中的ROLLUP函数

阅读更多
rollup(a,b)的特点是,先安(a,b)一起汇总统计,然后再按照A进行汇总统计,最后是对所有的统计再统计。

ROLLUP中的参数可以多个,形式也多样,例如包含在()内的参数如果有多个,但是又想对某些进行列绑定按照一个列处理,

则可以嵌套()。下例中的第二就是如此:



例1:

select a.khh,b.jjrxm,a.cjrq, sum(a.cjje) total from tjgmxls a,tkhxx b    
      where b.jjrbh(+)=a.khh and cjrq<20070201
      group by rollup(khh,jjrxm,cjrq);



例2:

select a.khh,b.jjrxm,a.cjrq, sum(a.cjje) total from tjgmxls a,tkhxx b    
      where b.jjrbh(+)=a.khh and cjrq<20070201
      group by rollup((khh,jjrxm),cjrq);

例3:

   有表格数据如下,

   SQL> select * from test_Value;

      MONS JJR               CJL       CJJE
---------- ---------- ---------- ----------
    200801 LZF               100       1000
    200802 LZF               200       2000
    200803 LZF               300       1000
    200801 wth               300       1000
    200802 wth               100        500
    200803 wth              1000       4000
6 rows selected

  在其上做一些比较复杂的查询

   -------

  SQL> select decode(jjr,null,'汇总',jjr),
  2    sum(cjl) ttl_cjl, sum(cjje), avg(cjl), sum(cjl) / sum(cjje)
  3    from test_value
  4   group by rollup(jjr)
  5   order by ttl_cjl
  6  /

DECODE(JJR,NULL,'汇总',JJR)    TTL_CJL  SUM(CJJE)   AVG(CJL) SUM(CJL)/SUM(CJJE)
--------------------------- ---------- ---------- ---------- ------------------
LZF                                600       4000        200               0.15
wth                               1400       5500 466.666666  0.254545454545455
汇总                              2000       9500 333.333333  0.210526315789474

这是比较集成的查询使用到统计,rollup,decode,order等功能
分享到:
评论

相关推荐

    group by 后 使用 rollup 子句 总结.doc

    在实际应用中,我们还可以在 `GROUP BY` 语句中同时指定其他列以及 `ROLLUP` 子句。例如: - **例 1:`GROUP BY A, ROLLUP(A, B)`** 产生的分组种数:3 种; - 第一种:`GROUP BY A, B` - 第二种:`GROUP BY...

    group by后使用rollup子句总结

    `ROLLUP` 子句可以在 `GROUP BY` 语句中使用,用于对分组结果进行汇总统计。它可以产生多种分组,然后对各个分组进行统计操作。`ROLLUP` 子句返回的结果集可以理解为各个分组所产生的结果集的并集且没有去掉重复数据...

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

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

    SQL语句中Group BY 和Rollup以及cube用法

    ### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...

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

    GROUP BY 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY 子句有多种形式,本文将通过实例来说明 GROUP BY 子句的...

    group by分组函数之rollup与cube用法1

    在SQL中,ROLLUP操作通过在GROUP BY语句后面添加ROLLUP关键字来实现。 例如,对于一个包含`group_id`和`job`的`group_test`表,我们可以执行以下查询: ```sql SELECT group_id, job, SUM(salary) FROM group_test...

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    GROUPING_ID()函数更进一步,它返回一个整数值,该值是GROUP BY列表中所有列的二进制表示,每个位对应于列在分组中的状态。0表示详细数据,1表示汇总。例如: ```sql SELECT DIVISION, JOB_ID, SUM(SALARY), ...

    group by用法.doc

    2. **使用DISTINCT**: 当需要去除重复值时,可以在聚合函数中使用`DISTINCT`,如`SELECT CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice) FROM Products WHERE UnitPrice &gt; 30 GROUP BY CategoryID...

    Sequelize中用group by进行分组聚合查询

    在SQL中,分组查询是通过`GROUP BY`子句来实现的,它可以将数据按照一个或多个列的值进行分组,通常结合聚合函数一起使用,以便对每个分组执行计算。 1. SQL中的分组查询 在SQL中,使用`GROUP BY`语句进行分组操作...

    处理group by 查询速度太慢的问题 数据量大.doc

    优化 Group By 查询速度的...通过本实例,我们可以总结出一些有价值的经验:在优化 Group By 查询时,需要将聚合函数用到的字段一起设置为联合索引;需要充分测试和分析查询结果;需要遵循一定的思路来优化查询;等等。

    Oracle ROLLUP和CUBE 用法

    ROLLUP操作是GROUP BY的一个扩展,它允许你生成一个包含不同层次的分组结果,从最细粒度的分组到最粗粒度的分组,类似于数据透视表的逐级展开。例如,如果你有一个按地区、城市和部门分组的数据集,使用ROLLUP可以...

    cube与rollup学习总结

    在数据库查询语言SQL中,`GROUP BY`子句用于将数据按照一个或多个列进行分组,以便于对每个分组执行聚合操作(如求和、平均值等)。而在`GROUP BY`的基础上,`CUBE`和`ROLLUP`两个关键词则提供了一种更加灵活的数据...

    order by 、group by 、having的用法

    - 当使用 `GROUP BY` 时,`SELECT` 语句中未包含在聚合函数内的列必须出现在 `GROUP BY` 子句中。例如,`SELECT department, COUNT(employee) FROM employees GROUP BY department` 会返回每个部门的员工数量。 - ...

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

    如果需要在结果中显示非分组列,该列必须包含在聚合函数中,例如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`等。 3. **HAVING子句**: `HAVING`子句用于在`GROUP BY`后过滤数据,类似于`WHERE`子句,但它作用于分组后的...

    rollup 在中石油开发数据库系统的使用实例

    Rollup 是 SQL 中的一种分组函数,它可以生成一个结果集,该结果集不仅包含所有可能的分组组合的结果,还包含所有可能的子集组合的结果。简单来说,Rollup 可以帮助我们生成不同级别的汇总数据,从而实现多维度的...

    ROLLUP的数据统计效果

    在标准的`GROUP BY` 语句中,我们指定一列或多列进行分组,然后对每个组进行聚合函数(如`SUM`,`COUNT`,`AVG`等)的操作。但当使用`ROLLUP` 时,它会生成所有可能的分组组合,包括原始的`GROUP BY` 列及其子集。 ...

    order_by_、group_by_、having的用法

    重要的是,`GROUP BY`后的所有列要么是聚合函数,要么是出现在`GROUP BY`子句中,以确保数据正确分组。 3. `HAVING`:`HAVING`子句用于在`GROUP BY`后对已分组的数据进行过滤,类似于`WHERE`子句,但`WHERE`是在...

    Oracle的Rollup用法

    在 Oracle 中,ROLLUP 子句可以与 GROUP BY 子句配合使用,以便对数据进行分组和聚合。ROLLUP 子句可以指定一个或多个字段,用于对数据进行分组和聚合。 例如,以下是对 grade 字段进行 rollup 的示例: SQL&gt; ...

    Sql学习第四天——SQL 关于with cube,with rollup和grouping解释及演示

    `CUBE`和`ROLLUP`是`WITH`子句中的两个特殊运算符,它们主要用于多维度数据分析和聚合操作,通常在`GROUP BY`语句中配合使用。 1. **CUBE运算符**: `CUBE`生成的结果集包含了所有可能的子集,即所选列中值的所有...

Global site tag (gtag.js) - Google Analytics