Tous les produits
Search
Centre de documentation

Hologres:QUALIFY (Bêta)

Dernière mise à jour :Aug 12, 2026

La clause QUALIFY filtre les résultats des fonctions de fenêtrage, tout comme HAVING le fait pour les fonctions d'agrégation.

Évaluée après le calcul de toutes les fonctions de fenêtrage, QUALIFY évite de recourir à une sous-requête ou à une clause WITH pour filtrer sur le résultat d'une fonction de fenêtrage.

Les clauses d'une instruction SELECT s'exécutent dans l'ordre suivant :

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. WINDOW

  6. QUALIFY

  7. DISTINCT

  8. ORDER BY

  9. LIMIT

Syntaxe

QUALIFY <predicate>

Forme complète de l'instruction :

SELECT <column_list>
  FROM <data_source>
  [GROUP BY ...]
  [HAVING ...]
  QUALIFY <predicate>
  [ ... ]

Paramètres

Paramètre

Description

column_list

Suit les règles applicables à la clause de projection d'une instruction SELECT.

data_source

Table ou autre source assimilable, telle qu'une vue.

predicate

Expression filtrant les résultats après le calcul des fonctions d'agrégation et de fenêtrage. Sa structure est identique à celle d'une clause HAVING, mais sans le mot-clé HAVING. Elle peut contenir une fonction de fenêtrage.

Remarques d'utilisation

  • QUALIFY exige au moins une fonction de fenêtrage dans l'un des emplacements suivants : column_list ou predicate.

  • Vous pouvez référencer les expressions de la column_list, y compris les fonctions de fenêtrage, par leurs alias de colonne.

  • QUALIFY prend en charge les agrégations et les sous-requêtes dans son predicate. Les règles d'agrégation sont identiques à celles de HAVING.

  • QUALIFY est un mot-clé réservé.

  • La syntaxe Snowflake de QUALIFY ne fait pas partie de la norme ANSI.

Exemples

Les exemples ci-dessous utilisent la fonction de fenêtrage ROW_NUMBER() pour retourner uniquement la première ligne de chaque partition.

Créez d'abord la table d'exemple :

CREATE TABLE qt (i INTEGER, p TEXT, o INTEGER);
INSERT INTO qt (i, p, o) VALUES
    (1, 'A', 1),
    (2, 'A', 2),
    (3, 'B', 1),
    (4, 'B', 2);
  • Sans QUALIFY : sous-requête imbriquée

    SELECT *
    FROM (
        SELECT
            i,
            p,
            o,
            ROW_NUMBER() OVER (PARTITION BY p ORDER BY o) AS row_num
        FROM qt
    )
    WHERE row_num = 1;

    Résultat :

    +---+---+---+---------+
    | I | P | O | ROW_NUM |
    |---+---+---+---------|
    | 1 | A | 1 |       1 |
    | 3 | B | 1 |       1 |
    +---+---+---+---------+
  • Avec QUALIFY : fonction de fenêtrage dans le prédicat

    Définissez la fonction de fenêtrage directement dans le prédicat QUALIFY :

    SELECT
        i,
        p,
        o
    FROM qt
    QUALIFY ROW_NUMBER() OVER (PARTITION BY p ORDER BY o) = 1;

    Résultat :

    +---+---+---+
    | I | P | O |
    |---+---+---|
    | 1 | A | 1 |
    | 3 | B | 1 |
    +---+---+---+
  • Avec QUALIFY : alias de colonne dans le prédicat

    Définissez la fonction de fenêtrage dans la column_list et référencez son alias dans le prédicat QUALIFY :

    SELECT
        i,
        p,
        o,
        ROW_NUMBER() OVER (PARTITION BY p ORDER BY o) AS row_num
    FROM qt
    QUALIFY row_num = 1;

    Résultat :

    +---+---+---+---------+
    | I | P | O | ROW_NUM |
    |---+---+---+---------|
    | 1 | A | 1 |       1 |
    | 3 | B | 1 |       1 |
    +---+---+---+---------+