Sql 计算计算值中的平均值/最小值/最大值/总计

Sql 计算计算值中的平均值/最小值/最大值/总计,sql,oracle,Sql,Oracle,编辑:添加PL/SQL脚本: 我正在运行一个脚本,该脚本计算不同表上两列之间的时间差。它基本上计算CA生成证书所需的时间。 我想运行average/min/max和过去10分钟内生成的证书总数 我设法计算了时间增量,但我不知道如何收集计算值上的最小值/最大值/平均值。(我想我必须根据经过的值计算平均值),但我没有做到这一点。我是否必须声明已用时间才能对其执行计算 set serveroutput on whenever sqlerror exit sql.sqlcode; set echo of

编辑:添加PL/SQL脚本:

我正在运行一个脚本,该脚本计算不同表上两列之间的时间差。它基本上计算CA生成证书所需的时间。 我想运行average/min/max和过去10分钟内生成的证书总数

我设法计算了时间增量,但我不知道如何收集计算值上的最小值/最大值/平均值。(我想我必须根据
经过的
值计算平均值),但我没有做到这一点。我是否必须声明已用时间
才能对其执行计算

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_输出行中的平均/最小/最大值吗?我编辑了答案,看一下。