云服务器网:购买云服务器和VPS必上的网站!

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

头几天要做一个统计查询的功能,由于触及多张表,多种条件的统计分析。一开始便想到了UNION和IF语句,然后写了1000多行代码,就为了查30条数据觉得不应当。然后就开始百度,多种条件下的统计。然后有一种语法让我眼前一亮,case when then else

头几天要做一个统计查询的功能,由于触及多张表,多种条件的统计分析。一开始便想到了UNION和IF语句,然后写了1000多行代码,就为了查30条数据觉得不应当。

然后就开始百度,多种条件下的统计。然后有一种语法让我眼前一亮,case when then else end

当满足CASE设定的条件时,就能够履行then语句。由于我要做的分组查询统计,是要罗列每种情况,而且根据输入的“管理员编号”区别返回区别结果,结果记录的条数和每种情况是可知的,这个语法完全可用

核心代码以下:

SELECT SUBSTR(A.业务,1,2) 行政区域,SUBSTR(A.业务,3,LENGTH(A.业务)⑵) 业务模块,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判断,理论上复杂度减少很多。

本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!

本文来源:https://www.yuntue.com/post/151046.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注