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

SQL GROUP BY Klausa untuk Pemula

Dalam SQL, GROUP BY klausa dapat digunakan untuk membagi hasil kueri ke dalam kelompok baris.

Ini biasanya dilakukan untuk melakukan satu atau lebih agregasi pada setiap grup.

Contoh 1

Berikut adalah contoh untuk mendemonstrasikan GROUP BY klausa.

Ambil tabel berikut:

SELECT * FROM Products;

Hasil:

+-------------+------------+---------------------------------+----------------+-----------------------------------------+
| ProductId   | VendorId   | ProductName                     | ProductPrice   | ProductDescription                      |
|-------------+------------+---------------------------------+----------------+-----------------------------------------|
| 1           | 1001       | Left handed screwdriver         | 25.99          | Purple. Includes left handed carry box. |
| 2           | 1001       | Long Weight (blue)              | 14.75          | Includes a long wait.                   |
| 3           | 1001       | Long Weight (green)             | 11.99          | Approximate 30 minute waiting period.   |
| 4           | 1002       | Sledge Hammer                   | 33.49          | Wooden handle. Free wine glasses.       |
| 5           | 1003       | Chainsaw                        | 245.00         | Orange. Includes spare fingers.         |
| 6           | 1003       | Straw Dog Box                   | 55.99          | Tied with vines. Very chewable.         |
| 7           | 1004       | Bottomless Coffee Mugs (4 Pack) | 9.99           | Brown ceramic with solid handle.        |
+-------------+------------+---------------------------------+----------------+-----------------------------------------+

Kita bisa menjalankan kueri berikut terhadap tabel itu.

SELECT 
    VendorId,
    COUNT(VendorId) AS Count
FROM Products
GROUP BY VendorId;

Hasil:

+------------+---------+
| VendorId   | Count   |
|------------+---------|
| 1001       | 3       |
| 1002       | 1       |
| 1003       | 2       |
| 1004       | 1       |
+------------+---------+

Di sini, kami menggunakan COUNT() fungsi agregat untuk mengembalikan jumlah baris untuk setiap VendorId , lalu GROUP BY klausa untuk mengelompokkan hasil.

Contoh 2

Dalam contoh ini kita menggunakan SUM() fungsi agregat untuk mengembalikan agregat penduduk semua kota dalam suatu kabupaten, kemudian GROUP BY klausa untuk mengelompokkan hasil.

Bayangkan kita memiliki tabel bernama City yang menyimpan nama kota dan populasinya, serta kode negara dan distriknya masing-masing (dalam kolom tersendiri).

Seperti ini:

SELECT * FROM city
WHERE CountryCode IN ('AGO', 'ARE', 'AUS');

Hasil:

+------+---------------+---------------+-----------------+--------------+
| ID   | Name          | CountryCode   | District        | Population   |
|------+---------------+---------------+-----------------+--------------|
| 56   | Luanda        | AGO           | Luanda          | 2022000      |
| 57   | Huambo        | AGO           | Huambo          | 163100       |
| 58   | Lobito        | AGO           | Benguela        | 130000       |
| 59   | Benguela      | AGO           | Benguela        | 128300       |
| 60   | Namibe        | AGO           | Namibe          | 118200       |
| 64   | Dubai         | ARE           | Dubai           | 669181       |
| 65   | Abu Dhabi     | ARE           | Abu Dhabi       | 398695       |
| 66   | Sharja        | ARE           | Sharja          | 320095       |
| 67   | al-Ayn        | ARE           | Abu Dhabi       | 225970       |
| 68   | Ajman         | ARE           | Ajman           | 114395       |
| 130  | Sydney        | AUS           | New South Wales | 3276207      |
| 131  | Melbourne     | AUS           | Victoria        | 2865329      |
| 132  | Brisbane      | AUS           | Queensland      | 1291117      |
| 133  | Perth         | AUS           | West Australia  | 1096829      |
| 134  | Adelaide      | AUS           | South Australia | 978100       |
| 135  | Canberra      | AUS           | Capital Region  | 322723       |
| 136  | Gold Coast    | AUS           | Queensland      | 311932       |
| 137  | Newcastle     | AUS           | New South Wales | 270324       |
| 138  | Central Coast | AUS           | New South Wales | 227657       |
| 139  | Wollongong    | AUS           | New South Wales | 219761       |
| 140  | Hobart        | AUS           | Tasmania        | 126118       |
| 141  | Geelong       | AUS           | Victoria        | 125382       |
| 142  | Townsville    | AUS           | Queensland      | 109914       |
| 143  | Cairns        | AUS           | Queensland      | 92273        |
+------+---------------+---------------+-----------------+--------------+

Saya mengurangi hasilnya menjadi hanya tiga negara, jika tidak daftarnya akan menjadi cara terlalu panjang untuk artikel ini.

Sekarang, misalkan kita ingin mendapatkan populasi setiap distrik, dan kita ingin membuat daftar setiap distrik, bersama dengan populasi dan kode negaranya.

Kita bisa melakukan ini.

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

Hasil:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Benguela        | 258300       |
| AGO           | Huambo          | 163100       |
| AGO           | Luanda          | 2022000      |
| AGO           | Namibe          | 118200       |
| ARE           | Abu Dhabi       | 624665       |
| ARE           | Ajman           | 114395       |
| ARE           | Dubai           | 669181       |
| ARE           | Sharja          | 320095       |
| AUS           | Capital Region  | 322723       |
| AUS           | New South Wales | 3993949      |
| AUS           | Queensland      | 1805236      |
| AUS           | South Australia | 978100       |
| AUS           | Tasmania        | 126118       |
| AUS           | Victoria        | 2990711      |
| AUS           | West Australia  | 1096829      |
+---------------+-----------------+--------------+

Kami dapat melihat bahwa hasil kami dikelompokkan seperti yang ditentukan, dan sekarang kami mendapatkan populasi penuh untuk setiap distrik (berlawanan dengan populasi masing-masing kota, yang merupakan cara mereka disimpan di tabel yang mendasarinya).

Perhatikan bahwa GROUP BY klausa harus muncul setelah WHERE klausa dan sebelum ORDER BY klausa.

Jika kami ingin mendapatkan populasi setiap negara dan bukan distrik, kueri kami menjadi lebih ringkas.

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

Hasil:

+---------------+--------------+
| CountryCode   | Population   |
|---------------+--------------|
| AGO           | 2561600      |
| ARE           | 1728336      |
| AUS           | 11313666     |
+---------------+--------------+

Ingatlah bahwa basis data sampel khusus ini sangat ketinggalan zaman, dan jumlah populasinya tidak mencerminkan kenyataan saat ini.

Contoh 3 – Klausa HAVING

Anda dapat menyertakan HAVING klausa dengan GROUP BY . Anda klausa untuk memfilter grup.

Contoh:

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      |
+---------------+-----------------+--------------+

HAVING klausanya mirip dengan WHERE klausa, kecuali WHERE memfilter baris individual, sedangkan HAVING kelompok filter.

Juga, WHERE klausa menyaring data sebelum itu dikelompokkan, sedangkan HAVING memfilter data setelah itu dikelompokkan.

Kode HAVING klausa menerima operator yang sama yang dapat Anda gunakan dengan WHERE klausa (seperti = , ) Operator for Beginners">> , =) Operator for Beginners">>= , IN , LIKE , dll).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperluas penggunaan DBCC CLONEDATABASE

  2. Menggali Lebih Dalam Migrasi Django

  3. Model Data Bisnis Berlangganan

  4. Desain Bill of Material (BOM) yang Fleksibel dan Dapat Dikelola

  5. SCD Tipe 3