WITHIN GROUP-спецификация
Функция
Задает порядок группировки записей при обработке агрегатных функций.
Спецификация
::=
Синтаксические правила
-
Использование
< WITHIN GROUP-спецификации >
совместно с< OVER-спецификацией >
недопустимо. -
< WITHIN GROUP-спецификация >
может применяться как при наличии, так и при отсутствии в< запросе выборки >
< GROUP BY-спецификации >
. -
Количество
< WITHIN GROUP-спецификаций >
в< запросе выборки >
не ограничено, однако при наличии в< запросе выборки >
< GROUP BY-спецификации >
все< ORDER BY-спецификация >
внутри< WITHIN GROUP-спецификации >
должны быть идентичны.Допустимый запрос (конструкции
within group (order by model)
одинаковы у обеих агрегатных функций): select bodytype, FIRST_VALUE(model) within group (order by model) as first_val, LAST_VALUE(model) within group (order by model) as last_val from auto group by bodytype; Недопустимые запросы (конструкцииwithin group
не идентичны): а) select bodytype, FIRST_VALUE(model) within group (order by model) as first_val, LAST_VALUE(model) within group (order by color) as last_val from auto group by bodytype; б) select FIRST_VALUE(make) within group (order by make asc) as first_val, LAST_VALUE(make) within group (order by make desc) as last_val from auto group by make;
Общие правила
-
При наличии в запросе
< GROUP BY-спецификации >
сортировка записей в соответствии с конструкцией< WITHIN GROUP-спецификация >
будет осуществляться отдельно внутри каждой группы. -
При отсутствии в запросе
< GROUP BY-спецификации >
сортироваться будут все записи выборки. -
Порядок сортировки аргументов важен только для агрегатных функций (
FIRST_VALUE
,LAST_VALUE
,LISTAGG
), результат которых зависит от заданной сортировки. Для агрегатных функций, возвращающих количественные значения (SUM
,COUNT
и др.), порядок сортировки не имеет значения, поэтому для них конструкция< WITHIN GROUP-спецификация >
игнорируется.
select count(*), FIRST_VALUE(model) within group (order by year, model, color) as first_val, LAST_VALUE(model) within group (order by year, model, color) as last_val from auto group by make; FIRST_VAL LAST_VAL --------- -------- | 7|A-310 |A-310 | | 91|AMBASSADOR SST V8 |MATADOR STATION | | 10|3.0 CSI |3.0 CSI | | 168|DODGE CHALLENGER SIX|PLYMOUTH ROAD RUNNER| …