Spec-Zone.ru › Phoenix

Ecto.Query.WindowAPI

Исходный код

Перечисляет все оконные функции.

Оконные функции всегда должны использоваться в качестве первого аргумента over/2, где второй аргумент — имя окна:

from e in Employee,
  select: {e.depname, e.empno, e.salary, over(avg(e.salary), :department)},
  windows: [department: [partition_by: e.depname]]

В приведённом выше примере мы получаем среднюю зарплату по каждому отделу. :department — это имя окна, в котором данные разбиты по e.depname, а avg/1 — оконная функция.

Однако определять окно необязательно, поскольку его определение можно передать вторым аргументом в over:

from e in Employee,
  select: {e.depname, e.empno, e.salary, over(avg(e.salary), partition_by: e.depname)}

Оба запроса эквивалентны. Однако, если вы многократно используете одно и то же разбиение на разделы, определение окна позволит сократить запрос. См. Ecto.Query.windows/3, где перечислены все возможные выражения окна, такие как :partition_by и :order_by.

Обзор

Функции

avg(value)

Вычисляет среднее значение для заданной записи.

count()

Подсчитывает количество записей в таблице.

count(value)

Подсчитывает количество заданных записей.

cume_dist()

Возвращает относительный ранг текущей строки: (количество предшествующих текущей строк или равных ей) / (общее количество строк).

dense_rank()

Возвращает ранг текущей строки без пропусков; эта функция подсчитывает группы равных строк.

filter(value, filter)

Применяет заданное выражение в качестве предложения FILTER к агрегатной функции. В настоящее время поддерживается только в Postgres.

first_value(value)

Возвращает значение, вычисленное для строки, которая является первой строкой рамки окна.

lag(value, offset \\ 1, default \\ nil)

Возвращает значение, вычисленное для строки, расположенной на заданное количество строк перед текущей строкой в пределах раздела.

last_value(value)

Возвращает значение, вычисленное для строки, которая является последней строкой рамки окна.

lead(value, offset \\ 1, default \\ nil)

Возвращает значение, вычисленное для строки, расположенной на заданное количество строк после текущей строки в пределах раздела.

max(value)

Вычисляет максимальное значение для заданной записи.

min(value)

Вычисляет минимальное значение для заданной записи.

nth_value(value, nth)

Возвращает значение, вычисленное для n-й строки рамки окна (отсчёт начинается с 1); nil, если такой строки нет.

ntile(num_buckets)

Возвращает целое число от 1 до значения аргумента, разбивая раздел на максимально равные части.

over(window_function, window_name)

Определяет значение на основе функции и окна. Дополнительные сведения см. в документации модуля.

percent_rank()

Возвращает относительный ранг текущей строки: (ранг - 1) / (общее количество строк - 1).

rank()

Возвращает ранг текущей строки с пропусками; то же значение, что и row_number/0 для первой равной ей строки.

row_number()

Возвращает порядковый номер текущей строки в её разделе, начиная с 1.

sum(value)

Вычисляет сумму для заданной записи.

Функции

avg(value)Исходный код

Вычисляет среднее значение для заданной записи.

from p in Payment, select: avg(p.value)

count()Исходный код

Подсчитывает количество записей в таблице.

from p in Post, select: count()

count(value)Исходный код

Подсчитывает количество заданных записей.

from p in Post, select: count(p.id)

cume_dist()Исходный код

Возвращает относительный ранг текущей строки: (количество предшествующих текущей строк или равных ей) / (общее количество строк).

from p in Post,
     select: cume_dist() |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

dense_rank()Исходный код

Возвращает ранг текущей строки без пропусков; эта функция подсчитывает группы равных строк.

from p in Post,
     select: dense_rank() |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

filter(value, filter)Исходный код

Применяет заданное выражение в качестве предложения FILTER к агрегатной функции. В настоящее время поддерживается только в Postgres.

from p in Post,
     select: avg(p.value)
             |> filter(p.value > 0 and p.value < 100)
             |> over(partition_by: p.category_id, order_by: p.date)

first_value(value)Исходный код

Возвращает значение, вычисленное для строки, которая является первой строкой рамки окна.

from p in Post,
     select: first_value(p.id) |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

lag(value, offset \\ 1, default \\ nil)Исходный код

Возвращает значение, вычисленное для строки, расположенной на заданное количество строк перед текущей строкой в пределах раздела.

Если такой строки нет, возвращает значение по умолчанию (которое должно иметь тот же тип, что и value). Значения offset и default вычисляются относительно текущей строки. Если они не указаны, offset по умолчанию равен 1, а default — nil.

from e in Events,
     windows: [w: [partition_by: e.name, order_by: e.tick]],
     select: {
       e.tick,
       e.action,
       e.name,
       lag(e.action) |> over(:w), # previous_action
       lead(e.action) |> over(:w) # next_action
     }

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

last_value(value)Исходный код

Возвращает значение, вычисленное для строки, которая является последней строкой рамки окна.

from p in Post,
     select: last_value(p.id) |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

lead(value, offset \\ 1, default \\ nil)Исходный код

Возвращает значение, вычисленное для строки, расположенной на заданное количество строк после текущей строки в пределах раздела.

Если такой строки нет, возвращает значение по умолчанию (которое должно иметь тот же тип, что и value). Значения offset и default вычисляются относительно текущей строки. Если они не указаны, offset по умолчанию равен 1, а default — nil.

from e in Events,
     windows: [w: [partition_by: e.name, order_by: e.tick]],
     select: {
       e.tick,
       e.action,
       e.name,
       lag(e.action) |> over(:w), # previous_action
       lead(e.action) |> over(:w) # next_action
     }

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

max(value)Исходный код

Вычисляет максимальное значение для заданной записи.

from p in Payment, select: max(p.value)

min(value)Исходный код

Вычисляет минимальное значение для заданной записи.

from p in Payment, select: min(p.value)

nth_value(value, nth)Исходный код

Возвращает значение, вычисленное для n-й строки рамки окна (отсчёт начинается с 1); nil, если такой строки нет.

from p in Post,
     select: nth_value(p.id, 4) |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

ntile(num_buckets)Исходный код

Возвращает целое число от 1 до значения аргумента, разбивая раздел на максимально равные части.

from p in Post,
     select: ntile(10) |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

over(window_function, window_name)Исходный код

Определяет значение на основе функции и окна. Дополнительные сведения см. в документации модуля.

from e in Employee, select: over(avg(e.salary), partition_by: e.depname)

percent_rank()Исходный код

Возвращает относительный ранг текущей строки: (ранг - 1) / (общее количество строк - 1).

from p in Post,
     select: percent_rank() |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

rank()Исходный код

Возвращает ранг текущей строки с пропусками; то же значение, что и row_number/0 для первой равной ей строки.

from p in Post,
     select: rank() |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

row_number()Исходный код

Возвращает порядковый номер текущей строки в её разделе, начиная с 1.

from p in Post,
     select: row_number() |> over(partition_by: p.category_id, order_by: p.date)

Обратите внимание: эту функцию необходимо вызывать с использованием синтаксиса оконных функций.

sum(value)Исходный код

Вычисляет сумму для заданной записи.

from p in Payment, select: sum(p.value)

Пакет Hex Предварительный просмотр Hex Просмотреть llms.txt Скачать версию ePub

Создано с помощью ExDoc (v0.40.2) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://ecto.hexdocs.pm/Ecto.Query.WindowAPI.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API