Sql 计算计算值中的平均值/最小值/最大值/总计
编辑:添加PL/SQL脚本: 我正在运行一个脚本,该脚本计算不同表上两列之间的时间差。它基本上计算CA生成证书所需的时间。 我想运行average/min/max和过去10分钟内生成的证书总数 我设法计算了时间增量,但我不知道如何收集计算值上的最小值/最大值/平均值。(我想我必须根据Sql 计算计算值中的平均值/最小值/最大值/总计,sql,oracle,Sql,Oracle,编辑:添加PL/SQL脚本: 我正在运行一个脚本,该脚本计算不同表上两列之间的时间差。它基本上计算CA生成证书所需的时间。 我想运行average/min/max和过去10分钟内生成的证书总数 我设法计算了时间增量,但我不知道如何收集计算值上的最小值/最大值/平均值。(我想我必须根据经过的值计算平均值),但我没有做到这一点。我是否必须声明已用时间才能对其执行计算 set serveroutput on whenever sqlerror exit sql.sqlcode; set echo of
经过的值计算平均值),但我没有做到这一点。我是否必须声明已用时间
才能对其执行计算
set serveroutput on
whenever sqlerror exit sql.sqlcode;
set echo off
SET VERIFY OFF
set heading off
SET FEEDBACK OFF
set serveroutput on size unlimited
set linesize 300
ALTER session SET TIME_ZONE='GMT';
Declare
vv_SchemaName VARCHAR2(15);
BEGIN
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
FOR REVOKED IN (
select a.transaction_id as trans_Id,
e.eventcode,
e.eventtime,
a.time_received,
round((e.eventtime - a.time_received) * 86400) as elapsed
from request_history_tbl a
join
eventlog_tbl e
on a.transaction_id = e.transaction_id
where e.eventtime >= current_timestamp - 2
and e.eventcode = '50'
)
LOOP
dbms_output.put_line('average_request_time' || ...)
dbms_output.put_line('Min_request_time' || ...)
dbms_output.put_line('max_request_time' || ...)
END LOOP;
END;
如何在dbms\u输出中获取平均值/最小值/最大值。放置\u行?如果我理解正确,那么您编写的查询可能会用作CTE(或内联视图),即用于获取所需内容的源:
with temp as
(select a.transaction_id,
e.eventcode,
e.eventtime,
a.time_received,
(e.eventtime - a.time_received) * 86400 as diff_in_seconds
from request_history_tbl a join eventlog_tbl e
on a.transaction_id = e.transaction_id
where e.eventtime >= current_timestamp - 10/1440
and e.eventcode = '50'
)
select avg(diff_in_seconds) avg_diff,
min(diff_in_seconds) min_diff,
max(diff_in_seconds) max_diff
from temp;
切换到PL/SQL很容易;在循环游标中使用该查询并显示结果:
begin
for cur_r in
(select avg(diff_in_seconds) avg_diff,
min(diff_in_seconds) min_diff,
max(diff_in_seconds) max_diff
from (select a.transaction_id,
e.eventcode,
e.eventtime,
a.time_received,
(e.eventtime - a.time_received) * 86400 as diff_in_seconds
from request_history_tbl a join eventlog_tbl e
on a.transaction_id = e.transaction_id
where e.eventtime >= current_timestamp - 10/1440
and e.eventcode = '50'
)
) loop
dbms_output.put_line(cur_r.avg_diff ||', '||
cur_r.min_diff ||', '||
cur_r.max_diff);
end loop;
end;
我更新了原来的问题。你能帮我得到dbms_输出行中的平均/最小/最大值吗?我编辑了答案,看一下。