`
yjzagan2003
  • 浏览: 37118 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle分组统计小计放在最后一行的处理

阅读更多

      在做统计查询,需要一个小计百分数放在最后一行,但不是最大最小的。处理过程如下记录:

SELECT '工单' AS BILTYPENAME,
               CASE WHEN BUREAU_ID IS NULL THEN '小计'
               ELSE BUREAU_ID
               END AS BUREAU_ID,
               CASE WHEN BILLSERVER_ENNAME IS NULL AND BUREAU_ID IS NOT NULL 
                 THEN '小计'
                 ELSE BILLSERVER_ENNAME
               END AS BILLSERVER_ENNAME,
               SUM(TOTAL) AS TOTAL,
               SUM(SUCC_NUM) AS SUCCNUM,
               SUM(FAIL_NUM) AS FAILNUM,
               DECODE(SUM(SUCC_NUM) / SUM(TOTAL),NULL,'0',1,'100',
                    TO_CHAR(ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4) * 100
                        ,'fm90.00')) || '%' 
               AS SUCCESSRATE,
               DECODE(BILLSERVER_ENNAME, NULL, -1, 1) 
                   *ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4) AS PAIXU
          FROM APP_ORIGINBILL_STAT_DAY ORIGINBILLOBJ
         WHERE 1 = 1
         GROUP BY ROLLUP(BUREAU_ID, BILLSERVER_ENNAME)
         ORDER BY BUREAU_ID NULLS LAST, PAIXU DESC

 这里百分数用 DECODE(SUM(SUCC_NUM) / SUM(TOTAL),NULL,'0',1,'100',
                    TO_CHAR(ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4) * 100 ,'fm90.00')) || '%'  来表示,这样最后排序时,有可能小计位于中间位置,通过 PAIXU 字段  DECODE(BILLSERVER_ENNAME, NULL, -1, 1)
                   *ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4)  重新进行降序排序,可以真正实现如图的排序。

 

 应该有更好的方法,希望能提供!

  • 大小: 110.2 KB
0
0
分享到:
评论

相关推荐

    Oracle 分组聚合查询 - 开源中国社区1

    在实际应用中,Oracle的分组聚合查询可以用于各种场景,例如统计销售额,计算平均值,或者找出最大或最小值。通过灵活运用`GROUP BY`和聚合函数,我们可以对大量数据进行有效的分析和汇总,从而提取出有价值的信息。...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11...

    Oracle_SQL小宝典

    - 可以将SQL语句写成一行或多行。 - 关键字不能简写或折行。 - 子句通常放在不同的行以提高可读性。 - 缩进有助于增强代码的可读性。 #### 二、SQL的应用场景 - 在关系型数据库系统中,SQL充当客户端程序与...

    Oracle提高查询效率的方法

    11. GROUP BY 和 HAVING 字句的使用:在 GROUP BY 和 HAVING 字句之前尽量剔除多余的行, GROUP BY 和 HAVING 的执行顺序应该如下最优:select 的 Where 字句选择所有合适的行,Group By 用来分组个统计行,Having ...

    Oracle数据库、SQL

    - **NULL值处理** NULL值在排序中通常放在最后。 - **多列排序** 可以同时对多个列进行排序,如 `ORDER BY col1 ASC, col2 DESC`。 5. **单行函数** - 包括数值、日期、字符类型的转换和操作函数,如`TO_CHAR`, ...

    最全的oracle常用命令大全.txt

    可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的...

    Oracle Sql基础 宝典系列1

    - **GROUP BY子句**:用于按一个或多个列对结果集进行分组。 - **HAVING子句**:用于过滤GROUP BY子句产生的结果集。 - **嵌套组函数**:可以在一个GROUP BY子句中使用另一个组函数。 #### 第6章 子查询 - **子...

    ORACLE_SQL语句优化技术分析

    Oracle数据库优先处理索引列,因此应尽可能地将能利用索引的条件放在前面,这样可以在早期阶段排除大量不满足条件的数据行,从而降低后续处理的数据量。 #### 三、避免使用“SELECT *” 在Oracle数据库中,使用`...

    oracle数据库经典题目

    游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。 游标的基本操作步骤为: (1)声明游标,使用查询来定义游标的列和行 (2)打开游标,使用PL/...

    从实践中学习Oracle SQL(下)

    本文详细介绍了 Oracle SQL 中的一些高级概念和技术,包括子查询、分组、连接、数据操纵语言 (DML)、事务处理、视图、索引优化以及 PL/SQL 和数据库安全等。通过这些实践案例的学习,相信读者已经掌握了更多实用的...

    oracle 入门

    - ORDER BY子句必须放在查询语句的最后。 **示例**: 如果我们希望查看`balance`表中每个客户的余额总和,并按余额总和降序排列: ```sql SELECT customer_name, SUM(balance) AS total_balance FROM balance GROUP ...

    oracle数据查询

    - **可读性增强**:为了提高代码的可读性,可以使用缩进,并将每个从句放在新的一行开始。 #### 三、基本查询和排序 **3.1 基本查询语句** 最简单的SQL查询语句形式如下: ``` SELECT 字段名列表 FROM 表名 ...

    oracle子查询PPT课件.ppt

    * 单行子查询只能返回一行结果。 * 单行子查询使用单行比较操作符,例如:=、>、<、>=、、等。 五、多行子查询 * 多行子查询可以返回多行结果。 * 多行子查询使用多行比较操作符,例如:IN、ANY、ALL、SOME等。 ...

    Oracle 查询优化的基本准则详解

    相反,In操作可能导致额外的转换或子查询执行,尤其是当包含复杂的分组统计时。 避免使用Not In也是优化的一个方面,因为它无法利用索引。Not In的查询通常会转化为全表扫描,效率较低。在这种情况下,推荐使用...

    Oracle10G培训日志

    - **计数**:`COUNT(*)`统计所有行,`COUNT(column_name)`统计非空行。 - **求和**:`SUM(column_name)`计算所有行的总和。 - **平均值**:`AVG(column_name)`计算所有行的平均值。 - **最大值**:`MAX(column_name)...

    2009达内SQL学习笔记

    SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号...

    SQL最佳实践

    - **排序函数**:如`LEAD`、`LAG`等,用于获取前一行或后一行的数据。 - **数据分布函数**:如`PERCENT_RANK`、`CUME_DIST`等,用于计算百分位数和累积分布。 - **统计分析函数**:如`AVG`、`SUM`、`COUNT`等,用于...

    group by的详解

    在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...

Global site tag (gtag.js) - Google Analytics