Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Klausa SQL HAVING untuk Pemula

Dalam SQL, HAVING klausa dapat digunakan untuk menentukan kondisi pencarian untuk grup atau agregat.

Kode HAVING klausa biasanya digunakan dengan GROUP BY ayat. Jika tidak, ada grup gabungan tunggal implisit.

Kode HAVING klausanya mirip dengan WHERE klausa, kecuali WHERE memfilter baris individual, sedangkan HAVING kelompok filter. WHERE klausa menyaring data sebelum itu dikelompokkan, sedangkan HAVING memfilter data setelah itu dikelompokkan.

Contoh 1 – HAVING dengan COUNT()

Misalkan kita memiliki tabel berikut:

SELECT * FROM Pets;

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Kami dapat menjalankan kueri berikut terhadap tabel ini:

SELECT 
    PetTypeId, 
    COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;

Hasil:

+-------------+---------+
| PetTypeId   | Count   |
|-------------+---------|
| 3           | 4       |
| 2           | 3       |
+-------------+---------+

Dalam hal ini, kami menggunakan HAVING klausa dalam hubungannya dengan GROUP BY klausa untuk mengembalikan hanya baris yang memiliki COUNT(PetTypeId) lebih besar dari 2 . Ini menggunakan COUNT() function, yang merupakan fungsi agregat standar SQL yang tersedia di sebagian besar RDBMS utama.

Jika kita menghilangkan HAVING klausa, kita mendapatkan satu hasil lagi:

SELECT 
    PetTypeId, 
    COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
ORDER BY Count DESC;

Hasil:

+-------------+---------+
| PetTypeId   | Count   |
|-------------+---------|
| 3           | 4       |
| 2           | 3       |
| 1           | 1       |
+-------------+---------+

Contoh 2 – HAVING dengan SUM()

Ini contoh lain. Kali ini kita menggunakan HAVING klausa dengan SUM() function, yang merupakan fungsi agregat lain yang tersedia di sebagian besar RDBMS utama (lihat SQLite SUM() untuk contoh lain).

SELECT
    CountryCode,
    District,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) > 1000000
ORDER BY CountryCode;

Hasil:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Luanda          | 2022000      |
| AUS           | New South Wales | 3993949      |
| AUS           | Queensland      | 1805236      |
| AUS           | Victoria        | 2990711      |
| AUS           | West Australia  | 1096829      |
+---------------+-----------------+--------------+

Contoh 3 – HAVING dengan IN Operator

Anda tidak terbatas hanya pada ) Operator untuk Pemula”>lebih besar dari operator (> ) saat menggunakan HAVING ayat. Anda dapat menggunakan operator yang sama yang dapat Anda gunakan dengan WHERE klausa (seperti = , ) Operator for Beginners">< , =) Operator for Beginners">>= , IN , LIKE , dll).

Berikut adalah contoh yang menggunakan IN operator untuk menentukan rentang nilai agregat yang akan dikembalikan.

SELECT
    CountryCode,
    District,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) IN (2022000, 3993949, 2990711)
ORDER BY CountryCode;

Hasil:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Luanda          | 2022000      |
| AUS           | New South Wales | 3993949      |
| AUS           | Victoria        | 2990711      |
+---------------+-----------------+--------------+

Contoh 4 – HAVING tanpa GROUP BY Klausa

Meskipun HAVING biasanya digunakan dengan GROUP BY klausa, itu juga dapat digunakan tanpa itu. Saat digunakan tanpanya, ada grup tunggal yang teragregasi.

Hasil yang Anda peroleh mungkin bergantung pada DBMS Anda, tetapi berikut adalah contoh yang dilakukan di SQL Server.

SELECT
    SUM(Population) AS Population
FROM City
HAVING SUM(Population) > 2000000;

Hasil:

+--------------+
| Population   |
|--------------|
| 1429559884   |
+--------------+

Contoh ini hanya mengembalikan populasi agregat semua kota dalam tabel.

Inilah yang terjadi jika kita menukar operator yang lebih besar dari (> ) dengan operator kurang dari (< ).

SELECT
    SUM(Population) AS Population
FROM City
HAVING SUM(Population) < 2000000;

Hasil:

(0 rows affected)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana tidak memanggil prosedur tersimpan yang dikompilasi secara asli Hekaton

  2. Menghitung Median dengan Kursor Dinamis

  3. Memvisualisasikan Tipping Point dengan Plan Explorer

  4. Cara Membuat Kluster Amazon Aurora

  5. Model Data Bengkel Mobil