WITHIN GROUP-спецификация

Функция

Задает порядок группировки записей при обработке агрегатных функций.

Спецификация

   

Синтаксические правила

  1. Использование совместно с недопустимо.

  2. может применяться как при наличии, так и при отсутствии в <запросе выборки> .

  3. Количество в <запросе выборки> не ограничено, однако при наличии в <запросе выборки> все внутри должны быть идентичны.

    Допустимый запрос (конструкции 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;

Общие правила

  1. При наличии в запросе сортировка записей в соответствии с конструкцией будет осуществляться отдельно внутри каждой группы.

  2. При отсутствии в запросе сортироваться будут все записи выборки.

  3. Порядок сортировки аргументов важен только для агрегатных функций (FIRST_VALUE, LAST_VALUE, LISTAGG), результат которых зависит от заданной сортировки. Для агрегатных функций, возвращающих количественные значения (SUM, COUNT и другие), порядок сортировки не имеет значения, поэтому для них конструкция игнорируется.

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