全部产品
Search
文档中心

Hologres:QUALIFY (Beta)

更新时间:Oct 31, 2025

Klausa QUALIFY digunakan untuk menyaring hasil dari fungsi jendela dalam pernyataan SELECT. Topik ini menjelaskan sintaksis dan penggunaan klausa QUALIFY.

Klausa QUALIFY menyaring hasil dari fungsi jendela, mirip dengan cara klausa HAVING menyaring hasil dari fungsi agregat. Klausa QUALIFY dievaluasi setelah fungsi jendela dihitung. Urutan eksekusi klausa dalam pernyataan SELECT adalah sebagai berikut:

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. WINDOW

  6. QUALIFY

  7. DISTINCT

  8. ORDER BY

  9. LIMIT

Sintaksis

QUALIFY <predicate>

Pernyataan yang mencakup QUALIFY memiliki format berikut:

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

Parameter

Parameter

Deskripsi

column_list

Mengikuti aturan untuk klausa proyeksi dalam pernyataan SELECT.

data_source

Tabel atau sumber lain yang menyerupai tabel, seperti tampilan.

predicate

Ekspresi yang menyaring hasil setelah fungsi agregat dan fungsi jendela. predicate terlihat seperti klausa HAVING tetapi menghilangkan kata kunci HAVING. Ini juga dapat berisi fungsi jendela.

Catatan Penggunaan

  • Klausa QUALIFY memerlukan setidaknya satu fungsi jendela yang didefinisikan di salah satu klausa berikut dalam pernyataan SELECT:

    • column_list

    • predicate

  • Anda dapat merujuk ekspresi dalam column_list, termasuk fungsi jendela, melalui alias kolom mereka.

  • QUALIFY mendukung agregasi dan subkueri dalam predicate-nya. Untuk agregasi, aturannya sama seperti untuk klausa HAVING.

  • QUALIFY adalah kata kunci yang dicadangkan.

  • Sintaksis Snowflake untuk QUALIFY bukan bagian dari standar ANSI.

Contoh

Klausa QUALIFY menyederhanakan kueri yang menyaring hasil dari fungsi jendela. Tanpa QUALIFY, penyaringan ini memerlukan subkueri bersarang. Contoh berikut menggunakan fungsi ROW_NUMBER() untuk mengembalikan hanya baris pertama dari setiap partisi. Buat tabel:

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);
  • Gunakan sarang daripada QUALIFY:

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

    Kueri mengembalikan hasil berikut:

    +---+---+---+---------+
    | I | P | O | ROW_NUM |
    |---+---+---+---------|
    | 1 | A | 1 |       1 |
    | 3 | B | 1 |       1 |
    +---+---+---+---------+
  • Gunakan QUALIFY:

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

    Kueri mengembalikan hasil berikut:

    +---+---+---+
    | I | P | O |
    |---+---+---|
    | 1 | A | 1 |
    | 3 | B | 1 |
    +---+---+---+
  • Rujuk alias kolom dalam klausa QUALIFY:

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

    Kueri mengembalikan hasil berikut:

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