OVER-спецификация

Функция

Определение разбивки на группы результирующей выборки данных.

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

<OVER-спецификация>::=

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

  1. <Значимое выражение> должно быть именем столбца. Использование псевдонимов или выражений не допускается.

  2. В <запросе выборки> может использоваться только одна <OVER-спецификация>, т.е. запрос вида

    select (rank() over (order by rowid))/(rank() over (order by rowid desc)) from auto where rowid<10;

    выполняться не будет. Это ограничение можно обойти следующим образом:

    select a/b from (select (rank() over (order by rowid)) a,(rank() over (order by rowid desc)) b from auto where rowid<10);

    Примечание

    Для агрегатных функций такого ограничения нет, т.е. приведенный ниже запрос будет выполнен:

    select sum(personid) over (partition by make) / sum(personid) over (partition by model) from auto where rowid<10;

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

  1. Конструкция PARTITION BY выполняет разбивку результирующего набора данных на разделы с целью последующего применения к ним агрегатных или аналитических функций.

  2. Если конструкция PARTITION BY опущена, то <OVER-спецификация> распространяется на весь результирующий набор данных.

  3. <ORDER BY-спецификация> задает логический порядок, в котором должны выполняться вычисления применяемой к разделу данных агрегатной или аналитической функции (а не порядок представления результата, как обычная <ORDER BY-спецификация>).

  4. Если <ORDER BY-спецификация> опущена, то <OVER-спецификация> распространяется на весь результирующий набор данных.

  5. В тексте запроса перед <OVER-спецификацией> должна указываться аналитическая функция, применяемая к получаемым наборам данных.

    select personid, 
           make, 
           lag(make)over (partition by model, bodytype order by personid desc)
      from auto;
  6. Если задана опция DISTINCT, то она применяется к результату OVER (а не наоборот).

    select distinct first_value(InId) over (order by nvl(s.n1,0) desc, nvl(s.n2,0) desc, nvl(s.n3,0) desc) as InId1 from temp_table s;