在做统计查询,需要一个小计百分数放在最后一行,但不是最大最小的。处理过程如下记录:
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
分享到:
相关推荐
在实际应用中,Oracle的分组聚合查询可以用于各种场景,例如统计销售额,计算平均值,或者找出最大或最小值。通过灵活运用`GROUP BY`和聚合函数,我们可以对大量数据进行有效的分析和汇总,从而提取出有价值的信息。...
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...
- 可以将SQL语句写成一行或多行。 - 关键字不能简写或折行。 - 子句通常放在不同的行以提高可读性。 - 缩进有助于增强代码的可读性。 #### 二、SQL的应用场景 - 在关系型数据库系统中,SQL充当客户端程序与...
11. GROUP BY 和 HAVING 字句的使用:在 GROUP BY 和 HAVING 字句之前尽量剔除多余的行, GROUP BY 和 HAVING 的执行顺序应该如下最优:select 的 Where 字句选择所有合适的行,Group By 用来分组个统计行,Having ...
- **NULL值处理** NULL值在排序中通常放在最后。 - **多列排序** 可以同时对多个列进行排序,如 `ORDER BY col1 ASC, col2 DESC`。 5. **单行函数** - 包括数值、日期、字符类型的转换和操作函数,如`TO_CHAR`, ...
可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的...
- **GROUP BY子句**:用于按一个或多个列对结果集进行分组。 - **HAVING子句**:用于过滤GROUP BY子句产生的结果集。 - **嵌套组函数**:可以在一个GROUP BY子句中使用另一个组函数。 #### 第6章 子查询 - **子...
Oracle数据库优先处理索引列,因此应尽可能地将能利用索引的条件放在前面,这样可以在早期阶段排除大量不满足条件的数据行,从而降低后续处理的数据量。 #### 三、避免使用“SELECT *” 在Oracle数据库中,使用`...
游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。 游标的基本操作步骤为: (1)声明游标,使用查询来定义游标的列和行 (2)打开游标,使用PL/...
本文详细介绍了 Oracle SQL 中的一些高级概念和技术,包括子查询、分组、连接、数据操纵语言 (DML)、事务处理、视图、索引优化以及 PL/SQL 和数据库安全等。通过这些实践案例的学习,相信读者已经掌握了更多实用的...
- ORDER BY子句必须放在查询语句的最后。 **示例**: 如果我们希望查看`balance`表中每个客户的余额总和,并按余额总和降序排列: ```sql SELECT customer_name, SUM(balance) AS total_balance FROM balance GROUP ...
- **可读性增强**:为了提高代码的可读性,可以使用缩进,并将每个从句放在新的一行开始。 #### 三、基本查询和排序 **3.1 基本查询语句** 最简单的SQL查询语句形式如下: ``` SELECT 字段名列表 FROM 表名 ...
* 单行子查询只能返回一行结果。 * 单行子查询使用单行比较操作符,例如:=、>、<、>=、、等。 五、多行子查询 * 多行子查询可以返回多行结果。 * 多行子查询使用多行比较操作符,例如:IN、ANY、ALL、SOME等。 ...
相反,In操作可能导致额外的转换或子查询执行,尤其是当包含复杂的分组统计时。 避免使用Not In也是优化的一个方面,因为它无法利用索引。Not In的查询通常会转化为全表扫描,效率较低。在这种情况下,推荐使用...
- **计数**:`COUNT(*)`统计所有行,`COUNT(column_name)`统计非空行。 - **求和**:`SUM(column_name)`计算所有行的总和。 - **平均值**:`AVG(column_name)`计算所有行的平均值。 - **最大值**:`MAX(column_name)...
SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号...
- **排序函数**:如`LEAD`、`LAG`等,用于获取前一行或后一行的数据。 - **数据分布函数**:如`PERCENT_RANK`、`CUME_DIST`等,用于计算百分位数和累积分布。 - **统计分析函数**:如`AVG`、`SUM`、`COUNT`等,用于...
在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...