Spec-Zone.ru › DuckDB

Запрос QUALIFY

Оператор QUALIFY используется для фильтрации результатов WINDOW функций. Эта фильтрация результатов аналогична тому, как оператор HAVING фильтрует результаты агрегатных функций, применяемых на основе оператора GROUP BY.

Оператор QUALIFY позволяет избежать использования подзапросов или оператора WITH для выполнения этой фильтрации (подобно тому, как оператор HAVING позволяет избежать подзапроса). Пример использования оператора WITH вместо оператора QUALIFY приведен ниже примеров QUALIFY.

Обратите внимание, что фильтрация выполняется на основе WINDOW функций, а не обязательно на основе оператора WINDOW. Оператор WINDOW является необязательным и может использоваться для упрощения создания нескольких выражений WINDOW функций.

Оператор QUALIFY указывается после оператора WINDOW в операторе SELECT (WINDOW не обязательно указывать) и перед оператором ORDER BY.

Примеры

Каждый из следующих примеров создаёт тот же результат, который приведён ниже.

Фильтрация на основе функции окна, определённой в операторе QUALIFY:

SELECT
    schema_name,
    function_name,
    -- In this example the function_rank column in the select clause is for reference
    row_number() OVER (PARTITION BY schema_name ORDER BY function_name) AS function_rank
FROM duckdb_functions()
QUALIFY
    row_number() OVER (PARTITION BY schema_name ORDER BY function_name) < 3;

Фильтрация на основе функции окна, определённой в операторе SELECT:

SELECT
    schema_name,
    function_name,
    row_number() OVER (PARTITION BY schema_name ORDER BY function_name) AS function_rank
FROM duckdb_functions()
QUALIFY
    function_rank < 3;

Фильтрация на основе функции окна, определённой в операторе QUALIFY , но с использованием оператора WINDOW:

SELECT
    schema_name,
    function_name,
    -- In this example the function_rank column in the select clause is for reference
    row_number() OVER my_window AS function_rank
FROM duckdb_functions()
WINDOW
    my_window AS (PARTITION BY schema_name ORDER BY function_name)
QUALIFY
    row_number() OVER my_window < 3;

Фильтрация на основе функции окна, определённой в операторе SELECT , но с использованием оператора WINDOW:

SELECT
    schema_name,
    function_name,
    row_number() OVER my_window AS function_rank
FROM duckdb_functions()
WINDOW
    my_window AS (PARTITION BY schema_name ORDER BY function_name)
QUALIFY
    function_rank < 3;

Эквивалентный запрос на основе оператора WITH (без оператора QUALIFY):

WITH ranked_functions AS (
    SELECT
        schema_name,
        function_name,
        row_number() OVER (PARTITION BY schema_name ORDER BY function_name) AS function_rank
    FROM duckdb_functions()
)
SELECT
    *
FROM ranked_functions
WHERE
    function_rank < 3;
schema_name function_name function_rank
main !__postfix 1
main !~~ 2
pg_catalog col_description 1
pg_catalog format_pg_type 2

Синтаксис

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/query_syntax/qualify.html

Spec-Zone.ru

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