[英]Calculate average/min/max/total in calculated values
編輯:添加 PL/SQL 腳本:
我正在運行一個腳本來計算不同表上的兩列之間的時間差。 它主要計算 CA 生成證書所花費的時間。 我想運行平均/最小/最大和過去 10 分鍾內生成的證書總數。
我設法計算了時間增量,但我不知道如何收集計算值的最小值/最大值/平均值。 (我認為我必須計算elapsed
值的平均值)但我無法管理。 我是否必須聲明elapsed
才能對其進行計算?
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_output.put_lines 中獲得 AVG/MIN/MAX?
如果我理解正確,那么您編寫的查詢可能會用作 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 很容易; 在 cursor FOR 循環中使用該查詢並顯示結果:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.