ORACLE多条件的统计查询(case when)
前几天要做一个统计查询的功能,因为涉及多张表,多种条件的统计分析。一开始便想到了UNION和IF语句,然后写了1000多行代码,就为了查30条数据觉得不应该。
然后就开始百度,多种条件下的统计。然后有一种语法让我眼前一亮,case when then else end
当满足CASE设定的条件时,就可以执行then语句。由于我要做的分组查询统计,是要罗列每一种情况,而且根据输入的“管理员编号”不同返回不同结果,结果记录的条数和每一种情况是可知的,这个语法完全可用
核心代码如下:
SELECT SUBSTR(A.业务,1,2) 行政区域,SUBSTR(A.业务,3,LENGTH(A.业务)-2) 业务模块,A.已结案,A.办理中,A.案件总数,
ROUND(A.已结案 /decode(A.案件总数, 0, 9999,A.案件总数), 4) * 100 || '%' 完成率
FROM
(SELECT '市级律师服务' 业务,
1 排序,
SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间, 'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 IN ('ztdm1','ztdm2') THEN 1 ELSE 0 END) 已结案,
SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间, 'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 NOT IN ('ztdm1','ztdm2') THEN 1 ELSE 0 END) 办理中,
SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间, 'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 IS NOT NULL THEN 1 ELSE 0 END) 案件总数
FROM TA_律师申请委托
)A
WHERE A.排序 IN(V_排序1,V_排序2,V_排序3,V_排序4,V_排序5)
ORDER BY A.排序;
通过排序号,来控制不同管理员查询的数据范围不同:
V_排序1 INTEGER;
V_排序2 INTEGER;
V_排序3 INTEGER;
V_排序4 INTEGER;
V_排序5 INTEGER;
-----------------------------
SELECT
DECODE(P_管理员编号,'test1',2,
'test2',3,
'test3',4,
'test4',5
) INTO V_排序1 FROM DUAL;
V_排序2:=V_排序1+6;
V_排序3:=V_排序1+12;
V_排序4:=V_排序1+18;
V_排序5:=V_排序1+24;
目前测试数据量不大,优化前后性能差别不明显,但是代码行数减少了3倍以上,可读性明显增强,少了很多IF判断,理论上复杂度减少很多。最近还学到了ORACLE的分析函数Over,正在研究中。。。。。。
ORACLE多条件的统计查询(case when)的更多相关文章
- oracle表空间使用率统计查询
今天发现有一张采样表从1月5号开始不记录数据了,所以想查看一下表空间使用率,在网上零零散散找了很多资料,现在记录如下,也不知道哪一个最准确.还有一个就是网上拷贝的sql代码格式太乱了,不好看,找到一个 ...
- (转)oracle表空间使用率统计查询
转自:http://www.cnblogs.com/xwdreamer/p/3511047.html 参考文献 文献1:http://blog.itpub.net/24104518/viewspace ...
- oracle表空间相关统计查询
部分转自 https://www.cnblogs.com/xwdreamer/p/3511047.html--查询表空间使用情况SELECT UPPER(F.TABLESPACE_NAME) &quo ...
- 《SQL 进阶教程》case :用一条 SQL 语句进行不同条件的统计
进行不同条件的统计是case表达式的著名用法之一 select name,sum(case when sex = 1 then population else 0 end) as cnt_m,sum( ...
- Oracle数据库从入门到精通-分组统计查询
视频课程:李兴华 Oracle从入门到精通 视频课程学习者:阳光罗诺 视频来源:51CTO学院 整体内容: 统计函数的使用 分组统计查询的实现 对分组的数据过滤 统计函数 在之前我们就学习过一个COU ...
- 第20课-数据库开发及ado.net 可空值类型,资料管理器,多条件查询,Case
第20课-数据库开发及ado.net 可空值类型,资料管理器,多条件查询,Case SqlHelper using System; using System.Collections.Generic; ...
- Oracle ROWNUM用法和分页查询总结(转)
[转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 ...
- .Net程序员学用Oracle系列(20):层次查询(CONNECT BY)
1.层次查询语句 1.1.CONNECT BY 语法 1.2.CONNECT BY 示例 2.层次查询函数 2.1.SYS_CONNECT_BY_PATH 2.2.WMSYS.WM_CONCAT 2. ...
- Oracle中的多表查询(笛卡尔积原理)
本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查询一起完成各个复杂查询的操作: 一 ...
随机推荐
- custom drawer
import 'package:flutter/material.dart'; main() => runApp(MaterialApp( home: HomePage(), )); class ...
- Java知识回顾 (16)常用操作的Java示例
环境设置 Java 实例 – 如何编译一个Java 文件? Java 实例 – Java 如何运行一个编译过的类文件? Java 实例 - 如何执行指定class文件目录(classpath)? Ja ...
- jquery datatable如何动态分页
展开全部 一.分页 分页的基本思想是根据datatable的页码及每页显示的行数,将数据从数据库分段提出,然后再填充到表格中,以达到分页的效果. 这里需要用到datatable插件的几个属性: &qu ...
- Solr字段类型
一.一般属性 1.name fieldType的名称.该值用于字段定义中的类型属性,强烈建议名称仅包含字母数字和下划线,不能以数字开头[非强制]. 2.class 用于存储和索引此类型数据的类名.可以 ...
- minikube国内在线部署体验
问题描述: 快速学习k8s的各个组件的作用及yml的编写,minikube很适合. how to install Minikube, a tool that runs a single-node Ku ...
- 教你如何配置linux用户实现禁止ssh登陆机器但可用sftp登录!
构想和目标最近有个这样的诉求:基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,如直接修改代码.系统配置,并且也直接连上mysql.因此希望能限制开发人 ...
- windows10 进入BIOS
windows10开机进入不了BIOS 原因 上网查了电脑固件所应该有的进入键,什么F1.F2.F12.Delete以及什么要配置Fn+F1...等等方法就是开机进入不了BIOS. 解决办法 最后发现 ...
- golang面向对象实现
面向对象编程三大特点:封装.继承.多态. 1. 构造函数 Go不支持构造器.如果某类型的零值不可用,需要提供NewT(parameters)函数,用来初始化T类型的变量.按照Go的惯例,应该把创建T类 ...
- 泛微 e-cology OA 远程代码执行漏洞复现
0x00 前言 Poc已在github公开,由于环境搭建较为复杂,所以我在空间搜索引擎中找了国外的网站进行复现 如果有想自行搭建环境复现的可以在公众号内回复“泛微环境”即可获取源码及搭建方式 0x01 ...
- 使用Arduino开发板实现与MPU6050陀螺仪传感器连接的方法
MPU6050陀螺仪传感器具有许多强大的功能,采用单芯片封装.它是由一个MEMS加速度计.一个MEMS陀螺仪和温度传感器组成.该模块在将模拟量转换为数字量时非常准确,因为每个通道都有一个16位的模数转 ...