Нахождение процентного (%) диапазона среднего значения в SQL - PullRequest
0 голосов
/ 09 января 2019

Я хочу вернуть значения, которые лежат в пределах 20% от среднего значения в столбце Длительность в моей базе данных.

Я хочу использовать приведенный ниже код, но вместо того, чтобы возвращать значение Где Длительность меньше среднего значения продолжительности, я хочу вернуть все значения, которые лежат в пределах 20% от значения AVG (Длительность).

Select * From table
Where Duration < (Select AVG(Duration) from table)

1 Ответ

0 голосов
/ 09 января 2019

Вот один из способов ...

Select * From table
Where Duration between (Select AVG(Duration)*0.8 from table)
and (Select AVG(Duration)*1.2 from table)

возможно это, чтобы избежать повторных сканирований:

with cte as ( Select AVG(Duration) as AvgDuration from table )
Select * From table
Where Duration between (Select AvgDuration*0.8 from cte)
and (Select AvgDuration*1.2 from cte)

или

Select table.* From table
cross join ( Select AVG(Duration) as AvgDuration from table ) cj
Where Duration between cj.AvgDuration*0.8 and cj.AvgDuration*1.2

или используя оконную функцию:

Select d.* 
from (
     SELECT table.*
        , AVG(Duration) OVER() as AvgDuration
     From table
     ) d
Where d.Duration between d.AvgDuration*0.8 and d.AvgDuration*1.2

Последний способ может быть наиболее эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...