Кванторные функции для интервалов агрегирования

Функция

Определяет кванторные функции для интервалов агрегирования.

Спецификация
         
< кванторная функция для интервала >::=
< тип функции >::=
EVERY | ANY | SOME
Синтаксические правила
  1. < Значимые выражения > в < OVER-спецификации > задают столбцы выборки, по которым выполняется разбивка выборки на интервалы агрегирования.

  2. < Имена столбцов > в < ORDER BY-спецификации > внутри < OVER-спецификации > задают имена упорядочиваемых столбцов.

  3. Опция DISTINCT запрещена. При необходимости её следует выносить на верхний уровень.

Проверить, действительно ли, что все модели автомобилей производства FORD в таблице AUTO коричневого цвета?

select distinct mo, ev 
  from (select model mo, some(case color when 'BROWN' then true else false end) over (partition by make, model) ev
          from auto
         where make='FORD');
         
 MO                     EV
 --                     --
| CAPRI RS 2600        | F |
| GRAN TORINO SPORT V8 | F |
| LINCOLN CONTINENTAL  | F |
| LTD COUNTRY SQUIRE   | F |
| MERCURY COMET GT V8  | T |
| MERCURY MONTEREY     | T |
| MUSTANG BOSS 351     | T |
| PINTO RUNABOUT       | F |
Общие правила
  1. Кванторные функции для интервалов агрегирования выполняются аналогично соответствующим кванторным функциям для множества значений. Отличие в том, что в первом случае агрегирование применяется отдельно для каждого интервала агрегирования, во втором – сразу для всего множества значений.

    Сравните:

    create or replace table test(i int, b boolean);
    insert into test values (1, true);
    insert into test values (1, true);
    insert into test values (2, true);
    insert into test values (2, false);
    insert into test values (3, false);
    insert into test values (4, true);
    insert into test values (4, NULL);
    insert into test values (5, NULL);
    insert into test values (5, true);
    insert into test values (6, NULL);
    
    select every(b) from test group by i;
    |T|
    |F|
    |F|
    |T|
    |T|
    | |
    
    select every(b) over (partition by i) from test;
    |T|
    |T|
    |F|
    |F|
    |F|
    |T|
    |T|
    |T|
    |T|
    | |