• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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跨库查询的方法
    • oracle查询语句大全(oracle 基本命令大全一)
    • 基于Oracle多库查询方法(分享)
    上一篇:ORACLE SQL语句优化技术要点解析
    下一篇:ORACLE批量导入图片到BLOB字段代码示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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