首页 > 解决方案 > 平均重做使用情况查询

问题描述

我正在尝试查询以 Gb 为单位的平均重做,但由于以下错误而失败。

按天和小时(不带 )获取重做使用情况的查询AVG()有效。

SELECT
    Start_Date,
    Start_Time,
    Num_Logs,
    AVG(Round(Num_Logs * (Vl.Bytes / (1024 * 1024 * 1024)),2)) AS AVG_Gbytes,
    Vdb.NAME AS Dbname
FROM
    (SELECT
        To_Char(Vlh.First_Time, 'YYYY-MM-DD') AS Start_Date,
        To_Char(Vlh.First_Time, 'HH24') || ':00' AS Start_Time,
        COUNT(Vlh.Thread#) Num_Logs
    FROM
        V$log_History Vlh
    GROUP BY
        To_Char(Vlh.First_Time,  'YYYY-MM-DD'),
        To_Char(Vlh.First_Time, 'HH24') || ':00'
    ) Log_Hist, V$log Vl , V$database Vdb
WHERE
    Vl.Group# = 1
ORDER BY
    Log_Hist.Start_Date, Log_Hist.Start_Time;

错误:

ERROR at line 2:
ORA-00937: not a single-group group function

标签: sqloracle

解决方案


在聚合查询中,SELECT列需要与GROUP BY. 聚合查询要么有一个显式的GROUP BY,要么使用聚合函数(例如AVG())。

在您的情况下,您有一个聚合函数,并且没有GROUP BY. 要解决此问题,请将所有未聚合的表达式包含在GROUP BY. 所以添加:

GROUP BY Start_Date, Start_Time, Num_Logs, Vdb.NAME

目前尚不清楚这是否确实符合您的要求。但是你没有解释。如果这有效(即没有错误),但没有达到您想要的效果,请使用示例数据、所需结果和清晰的解释提出一个新问题。


推荐阅读