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