程序员人生 网站导航

oracle 分组求和一个小例子

栏目:数据库应用时间:2015-04-25 09:59:13

2015年4月9日 天气冷

表gw_log设计以下:
Name Type Nullable Default Comments ------------ ------------- -------- ------- ---------- ID VARCHAR2(50) 消息id SERVICE_ID VARCHAR2(20) Y 服务ID REQ_TIME DATE Y 要求时间 INVOKE_TIME DATE Y 调用时间 STATUS CHAR(1) Y '0' 0:失败,1:成功 RESP_TIME DATE Y 响应时间 USER_NAME VARCHAR2(20) Y 用户名 SERVICE_TIME DATE Y 调用服务结束时间 DESCN VARCHAR2(256) Y 描写

统计每天验证通过及不通过的总记录数:

成功的sql语句:
--方式1 select req_time, sum(decode(status, '0', 1, 0)) fail, sum(decode(status, '1', 1, 0)) success from gw_log group by req_time;

履行结果以下:
这里写图片描述
固然,用了decode()函数,那也能够用case函数了。

--方式2 select distinct a.req_time, a.fail, b.success from (select req_time,count(*) fail from gw_log where status = '0' group by req_time) a right join (select req_time, count(*) success from gw_log where status = '1' group by req_time) b on a.req_time = b.req_time 【参考:select * from (select * from emp) e cross join (select * from book) b】

履行结果以下:
这里写图片描述

count 无记录未返回0, 由于有 group by 子句的.
如果是不分组(即没有 Group By) 那是1定会返回1个 0 的.
要让有 分组 的count返回 0 , 则需要使用外连接

失败的sql语句:
--方式3 select * from (select a.req_time, count(*) success from gw_log a where a.status = '1' group by req_time union select b.req_time, count(*) fail from gw_log b where b.status = '0' group by b.req_time) g

履行结果以下:
这里写图片描述

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐