Найдите 5 верхних значений MAX () из таблицы SQL, а затем выполните AVG () для этой таблицы без них - PullRequest
5 голосов
/ 26 июня 2011

Я хочу иметь возможность выполнить avg () для столбца после , удалив в нем 5 самых высоких значений и увидев, что значение stddev не выше определенного числа.Это должно быть сделано полностью как запрос PL / SQL.

РЕДАКТИРОВАТЬ: Чтобы уточнить, у меня есть набор данных, который содержит значения в определенном диапазоне и отслеживает задержки.Я хочу знать, вызвано ли AVG () этих значений общим увеличением задержки или несколькими значениями с очень высоким значением stddev.Т.е. - (1, 2, 1, 3, 12311) в отличие от (122, 124, 111, 212).Мне также нужно добиться этого с помощью SQL-запроса из-за ограничений нашего программного обеспечения для мониторинга.

Ответы [ 4 ]

9 голосов
/ 26 июня 2011

Вы можете использовать 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
2 голосов
/ 02 сентября 2011
select column_name1 from 
(
  select column_name1 from table_name order by nvl(column_name,0) desc
)a 
where rownum<6 

(nvl делается, чтобы опустить значение null, если в столбце есть / есть какие-либо column_name)

0 голосов
/ 26 июня 2011

Ну, самый эффективный способ сделать это - вычислить (sum(all values) - sum(top 5 values)) / (row_count - 5)

SELECT SUM(val) AS top5sum FROM table ORDER BY val DESC LIMIT 5

SELECT SUM(val) AS allsum FROM table

SELECT (COUNT(*) - 5) AS bottomCount FROM table

Среднее тогда равно (allsum - top5sum) / bottomCount

0 голосов
/ 26 июня 2011

Сначала получите МАКС 5 значений:

SELECT TOP 5 RowId FROM Table ORDER BY Column

Теперь используйте это в своем основном утверждении:

SELECT AVG(Column) FROM Table WHERE RowId NOT IN (SELECT TOP 5 RowId FROM Table ORDER BY Column)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...