klausa HAVING

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Filter hasil yang dihasilkan oleh GROUP BY berdasarkan pada kondisi yang ditentukan. Sering digunakan bersama dengan klausul GROUP BY.

Sintaks

HAVING boolean_expression

Parameter-parameternya

  • boolean_expression

    Ekspresi apa pun yang mengevaluasi ke jenis hasil BOOLEAN. Dua atau lebih ekspresi dapat digabungkan bersama dengan menggunakan operator logis seperti AND atau OR .

    Ekspresi yang ditentukan dalam klausul HAVING hanya boleh mengacu pada:

    Jika ekspresi mereferensikan kolom yang tidak ada dalam klausa GROUP BY atau dibungkus dalam fungsi agregat, Azure Databricks menaikkan MISSING_AGGREGATION.

Kondisi kesalahan umum

Contoh

> CREATE TABLE dealer (id INT, city STRING, car_model STRING, quantity INT);
> INSERT INTO dealer VALUES
    (100, 'Fremont' , 'Honda Civic' , 10),
    (100, 'Fremont' , 'Honda Accord', 15),
    (100, 'Fremont' , 'Honda CRV'   , 7),
    (200, 'Dublin'  , 'Honda Civic' , 20),
    (200, 'Dublin'  , 'Honda Accord', 10),
    (200, 'Dublin'  , 'Honda CRV'   , 3),
    (300, 'San Jose', 'Honda Civic' , 5),
    (300, 'San Jose', 'Honda Accord', 8);

-- `HAVING` clause referring to column in `GROUP BY`.
> SELECT city, sum(quantity) AS sum FROM dealer GROUP BY city HAVING city = 'Fremont';
  Fremont  32

-- `HAVING` clause referring to aggregate function.
> SELECT city, sum(quantity) AS sum FROM dealer GROUP BY city HAVING sum(quantity) > 15;
  Dublin  33
 Fremont  32

-- `HAVING` clause referring to aggregate function by its alias.
> SELECT city, sum(quantity) AS sum FROM dealer GROUP BY city HAVING sum > 15;
  Dublin  33
 Fremont  32

-- `HAVING` clause referring to a different aggregate function than what is present in
-- `SELECT` list.
> SELECT city, sum(quantity) AS sum FROM dealer GROUP BY city HAVING max(quantity) > 15;
 Dublin  33

-- `HAVING` clause referring to constant expression.
> SELECT city, sum(quantity) AS sum FROM dealer GROUP BY city HAVING 1 > 0 ORDER BY city;
   Dublin  33
  Fremont  32
 San Jose  13

-- `HAVING` clause without a `GROUP BY` clause.
> SELECT sum(quantity) AS sum FROM dealer HAVING sum(quantity) > 10;
  78

-- Column not wrapped in aggregate function.
> SELECT city, quantity FROM dealer GROUP BY city HAVING sum(quantity) > 15;
  Error: MISSING_AGGREGATION