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| …