All Products
Search
Document Center

MaxCompute:QUALIFY

Last Updated:Jul 02, 2025

MaxCompute memungkinkan Anda menggunakan klausa QUALIFY untuk menyaring hasil yang dikembalikan oleh fungsi jendela berdasarkan filter tertentu. Anda dapat menggunakan klausa QUALIFY seperti halnya menggunakan klausa HAVING untuk menyaring hasil dari fungsi agregat dan GROUP BY. Topik ini menjelaskan sintaksis klausa QUALIFY serta memberikan contoh penggunaannya.

Ikhtisar

Klausa QUALIFY dalam pernyataan SELECT umumnya dieksekusi setelah fungsi jendela. Klausa ini menyaring hasil yang dikembalikan oleh fungsi jendela. Dalam pernyataan SELECT, urutan eksekusi klausa adalah sebagai berikut:

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. WINDOW

  6. QUALIFY

  7. DISTINCT

  8. ORDER BY

  9. LIMIT

Peringatan

  • Klausa QUALIFY dalam pernyataan SELECT harus mencakup setidaknya satu fungsi jendela. Jika tidak ada fungsi jendela yang ditentukan, kesalahan berikut akan muncul: FAILED: ODPS-0130071:[3,1] Semantic analysis exception - use QUALIFY clause without window function. Contoh kode tidak valid:

    SELECT * 
    FROM values (1, 2) t(a, b) 
    QUALIFY a > 1;
  • Dalam klausa QUALIFY, Anda dapat menggunakan alias kolom yang didefinisikan dalam pernyataan SELECT sebagai filter. Contoh kode:

    SELECT 
    sum(t.a) over (partition by t.b) as c1 
    FROM values (1, 2) t(a, b) 
    QUALIFY c1 > 1;

Sintaksis

QUALIFY <expression>

Ganti expression dengan ekspresi filter yang sesuai.

Contoh

  • Gunakan klausa QUALIFY untuk menyederhanakan pernyataan asli.

    • Pernyataan SQL tanpa klausa QUALIFY dan hasil yang dihasilkan:

      SELECT col1, col2
      FROM
      (
      SELECT
      t.a as col1,
      sum(t.a) over (partition by t.b) as col2
      FROM values (1, 2),(2,3) t(a, b)
      )
      WHERE col2 > 1;
      
      -- Hasil berikut dikembalikan:
      +------+------------+
      | col1 | col2       |
      +------+------------+
      | 2    | 2          |
      +------+------------+
    • Pernyataan SQL dengan klausa QUALIFY dan hasil yang dihasilkan:

      SELECT 
      t.a as col1, 
      sum(t.a) over (partition by t.b) as col2 
      FROM values (1, 2),(2,3) t(a, b) 
      QUALIFY col2 > 1;
      
      -- Hasil berikut dikembalikan:
      +------+------------+
      | col1 | col2       |
      +------+------------+
      | 2    | 2          |
      +------+------------+

      Dalam klausa QUALIFY, Anda juga dapat menggunakan fungsi jendela sebagai filter alih-alih alias kolom. Contoh pernyataan:

      SELECT t.a as col1,
      sum(t.a) over (partition by t.b) as col2
      FROM values (1, 2),(2,3) t(a, b)
      QUALIFY sum(t.a) over (partition by t.b)  > 1;
      
      -- Hasil berikut dikembalikan:
      +------+------------+
      | col1 | col2       |
      +------+------------+
      | 2    | 2          |
      +------+------------+
  • Klausa QUALIFY, WHERE, dan HAVING semuanya digunakan untuk menyaring data, tetapi berbeda dalam urutan eksekusi dalam pernyataan SELECT. Anda dapat menentukan filter kompleks dalam klausa QUALIFY.

    SELECT * 
    FROM values (1, 2),(2,3) t(a, b) 
    QUALIFY sum(t.a) over (partition by t.b)  IN (SELECT a FROM <table_name>);
  • Klausa QUALIFY dieksekusi setelah fungsi jendela. Pernyataan kompleks berikut dapat membantu Anda memahami urutan eksekusi klausa QUALIFY.

    SELECT a, b, max(c) 
    FROM values (1, 2, 3),(1, 2, 4),(1, 3, 5),(2, 3, 6),(2, 4, 7),(3, 4, 8) t(a, b, c) 
    WHERE a < 3 
    GROUP BY a, b 
    HAVING max(c) > 5 
    QUALIFY sum(b) over (partition by a) > 3;
    
    -- Hasil berikut dikembalikan:
    +------+------+------+
    | a    | b    | _c2  |
    +------+------+------+
    | 2    | 3    | 6    |
    | 2    | 4    | 7    |
    +------+------+------+