在oracle中平均一个组的成员

averaging members of a group in oracle

我正在处理一个查询,以显示一周内我们服务器的一般使用情况。更具体地说,我试图找到一周中特定日期的特定小时内的平均请求数。我知道平均功能在那里,但试图只对每个组的成员进行平均被证明很麻烦。当我 运行 这个查询时:

SELECT DOW, HH24, AVG(LISTAGG(SV_REQUESTS) WITHIN GROUP (ORDER BY SV_REQUESTS))
  FROM
    (SELECT
      COUNT(*) AS SV_REQUESTS,  
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'MM') AS MM,
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'DD') AS DD,
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'HH24') AS HH24,
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'D-DAY') AS DOW
    FROM ACTIVITY_ACCUMULATOR
    WHERE TIMESTAMP > to_date('01-08-2015','DD-MM-YYYY')
    GROUP BY
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'HH24'),
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'MM'),
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'DD'),
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'D-DAY'))
GROUP BY DOW, HH24;

我得到:

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:    
*Action:

有人能帮忙吗?我需要另一个子查询才能正确执行此操作吗?

我相信你只是想要 avg(sv_requests)。聚合函数(例如 avgcount)固有地对您分组所依据的行组进行操作。因此,对于 DOWHH24 的每个不同组合,相应行的 sv_requests 将被平均。

SELECT DOW, HH24, AVG(SV_REQUESTS)
  FROM
    (SELECT
      COUNT(*) AS SV_REQUESTS,  
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'MM') AS MM,
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'DD') AS DD,
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'HH24') AS HH24,
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'D-DAY') AS DOW
    FROM ACTIVITY_ACCUMULATOR
    WHERE TIMESTAMP > to_date('01-08-2015','DD-MM-YYYY')
    GROUP BY
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'HH24'),
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'MM'),
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'DD'),
      TO_CHAR(TO_DATE(TIMESTAMP,'DD-MM-YYYY HH24:MI:SS'),'D-DAY'))
GROUP BY DOW, HH24;