从SQL表中查找前5个MAX()值,然后在没有它们的情况下对该表执行AVG()

Ark*_* Y. 5 sql oracle

我希望能够删除列中的5个最高值对列执行avg()并查看stddev不高于某个数字.这必须完全作为PL/SQL查询完成.

编辑:为了澄清,我有一个数据集,其中包含一定范围内的值并跟踪延迟.我想知道这些值的AVG()是由于延迟的普遍增加,还是由于stddev非常高的一些值.即 - (1,2,1,3,12311)而不是(122,124,111,212).由于我们的监控软件的限制,我还需要通过SQL查询来实现这一点.

And*_*mar 9

您可以使用row_number查找前5个值,并在where子句中过滤掉它们:

select  avg(col1)
from    (
        select  row_number() over (order by col1 desc) as rn
        ,       *
        from    YourTable
        ) as SubQueryAlias
where   rn > 5
Run Code Online (Sandbox Code Playgroud)

  • @Arkadi:他的询问是这样的.注意`order by`. (3认同)