ORACLE多条件统计查询的简单方法

 更新时间:2017年10月10日 09:30:08   作者:我心自明  
这篇文章主要介绍了ORACLE多条件统计查询的简单方法,具有一定参考价值。这里给大家分享下,希望对大家有所帮助。

前几天要做一个统计查询的功能,因为涉及多张表,多种条件的统计分析。一开始便想到了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多条件统计查询的简单方法的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:oracle 数据库启动阶段分析oracle 虚拟专用数据库详细介绍Oracle分页查询性能优化代码详解 等,有什么问题可以随时留言,小编会及时回复大家。感谢朋友们对脚本之家网站的支持!

相关文章

  • oracle修改scott密码与解锁的方法详解

    oracle修改scott密码与解锁的方法详解

    本篇文章是对oracle修改scott密码与解锁的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • oracle基本查询操作子查询用法实例分析

    oracle基本查询操作子查询用法实例分析

    这篇文章主要介绍了oracle基本查询操作子查询用法,结合实例形式分析了oracle数据库子查询相关概念、原理、语法、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 有关Oracle数据库的备份情况

    有关Oracle数据库的备份情况

    有关Oracle数据库的备份情况...
    2007-03-03
  • Oracle中Union与Union All的区别(适用多个数据库)

    Oracle中Union与Union All的区别(适用多个数据库)

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来
    2012-07-07
  • Oracle存储过程的几种调用方式图文详解

    Oracle存储过程的几种调用方式图文详解

    存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次,下面这篇文章主要给大家介绍了关于Oracle存储过程的几种调用方式,需要的朋友可以参考下
    2023-04-04
  • Oracle中的instr()函数应用及使用详解

    Oracle中的instr()函数应用及使用详解

    这篇文章主要介绍了Oracle中的instr()函数应用及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Oracle临时表空间删除和重建实现过程

    Oracle临时表空间删除和重建实现过程

    这篇文章主要介绍了Oracle临时表空间删除和重建实现过程,临时表空间是NOLOGGING模式以及它不保存永久类型对象,因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace。下文更多详细内容介绍需要的小伙伴可以参考一下
    2022-03-03
  • Oracle安装卸载图文教程详解

    Oracle安装卸载图文教程详解

    这篇文章主要为大家介绍了Oracle安装卸载的详细图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Linux虚拟机下安装Oracle 11G教程图文解说

    Linux虚拟机下安装Oracle 11G教程图文解说

    这篇文章主要介绍了Linux虚拟机下安装Oracle 11G教程图文详解,本文文字图解相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Oracle根据时间查询的一些常见情况汇总

    Oracle根据时间查询的一些常见情况汇总

    根据时间查询是我们日常开发中经常会遇到的一个功能,下面这篇文章主要给大家介绍了关于Oracle根据时间查询的一些常见情况,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论