Sebagian besar kekuatan database relasional berasal dari memfilter data dan menggabungkan tabel bersama-sama. Inilah mengapa kami merepresentasikan relasi tersebut di tempat pertama. Tetapi sistem database modern menyediakan teknik berharga lainnya: pengelompokan.

Pengelompokan memungkinkan Anda mengekstrak informasi ringkasan dari database. Ini memungkinkan Anda menggabungkan hasil untuk membuat data statistik yang berguna. Pengelompokan menyelamatkan Anda dari penulisan kode untuk kasus umum seperti rata-rata daftar gambar. Dan itu bisa membuat sistem menjadi lebih efisien.

Apa yang Dilakukan Klausul GROUP BY?

GROUP BY, seperti namanya, mengelompokkan hasil ke dalam set yang lebih kecil. Hasilnya terdiri dari satu baris untuk setiap nilai berbeda dari kolom yang dikelompokkan. Kami dapat menunjukkan penggunaannya dengan melihat beberapa contoh data dengan baris yang memiliki beberapa nilai yang sama.

Berikut ini adalah database yang sangat sederhana dengan dua tabel yang mewakili album rekaman. Anda dapat mengatur database seperti itu dengan

instagram viewer
menulis skema dasar untuk sistem database pilihan Anda. Itu album tabel memiliki sembilan baris dengan kunci utama Indo kolom dan kolom untuk nama, artis, tahun rilis, dan penjualan:

++++++
| id | nama | artist_id | release_year | penjualan |
++++++
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | Sisi Gelap Bulan | 2 | 1973 | 24 |
| 3 | Rumor | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Hewan | 2 | 1977 | 6 |
| 6 | Selamat Tinggal Jalan Bata Kuning | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Kelelawar Keluar dari Neraka | 7 | 1977 | 28 |
++++++

Itu artis tabel bahkan lebih sederhana. Ini memiliki tujuh baris dengan kolom id dan nama:

+++
| id | nama |
+++
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirwana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Roti daging |
+++

Anda dapat memahami berbagai aspek GROUP BY hanya dengan kumpulan data sederhana seperti ini. Tentu saja, kumpulan data kehidupan nyata akan memiliki lebih banyak baris, tetapi prinsipnya tetap sama.

Pengelompokan berdasarkan Kolom Tunggal

Misalkan kita ingin mencari tahu berapa banyak album yang kita miliki untuk setiap artis. Mulailah dengan tipikal PILIH query untuk mengambil kolom artist_id:

PILIH artist_id FROM album

Ini mengembalikan kesembilan baris, seperti yang diharapkan:

++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++

Untuk mengelompokkan hasil ini berdasarkan artis, tambahkan frasa GRUP OLEH artist_id:

PILIH artist_id DARI album GROUP BY artist_id

Yang memberikan hasil sebagai berikut:

++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++

Ada tujuh baris di set hasil, dikurangi dari total sembilan di album meja. Masing-masing unik artist_id memiliki satu baris. Terakhir, untuk mendapatkan hitungan sebenarnya, tambahkan MENGHITUNG(*) ke kolom yang dipilih:

PILIH artist_id, COUNT (*)
DARI album
GRUP OLEH artist_id
+++
| artist_id | JUMLAH (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

Hasil mengelompokkan dua pasang baris untuk artis dengan id 2 dan 6. Masing-masing memiliki dua album di database kami.

Terkait: Lembar Curang Perintah SQL Penting untuk Pemula

Cara Mengakses Data yang Dikelompokkan Dengan Fungsi Agregat

Anda mungkin telah menggunakan MENGHITUNG fungsi sebelumnya, khususnya di MENGHITUNG(*) bentuk seperti yang terlihat di atas. Ini mengambil jumlah hasil dalam satu set. Anda dapat menggunakannya untuk mendapatkan jumlah total record dalam sebuah tabel:

PILIH JUMLAH (*) DARI album
++
| JUMLAH (*) |
++
| 9 |
++

JUMLAH adalah fungsi agregat. Istilah ini mengacu pada fungsi yang menerjemahkan nilai dari beberapa baris menjadi satu nilai. Mereka sering digunakan bersama dengan pernyataan GROUP BY.

Daripada hanya menghitung jumlah baris, kita dapat menerapkan fungsi agregat ke nilai yang dikelompokkan:

SELECT artist_id, SUM (penjualan)
DARI album
GRUP OLEH artist_id
+++
| artist_id | SUM (penjualan) |
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

Total penjualan yang ditampilkan di atas untuk artis 2 dan 6 adalah gabungan penjualan beberapa album mereka:

SELECT artist_id, penjualan
DARI album
DI MANA artist_id IN (2, 6)
+++
| artist_id | penjualan |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

Pengelompokan berdasarkan Beberapa Kolom

Anda dapat mengelompokkan dengan lebih dari satu kolom. Cukup sertakan beberapa kolom atau ekspresi, dipisahkan dengan koma. Hasilnya akan dikelompokkan sesuai dengan kombinasi kolom-kolom ini.

PILIH release_year, sales, count (*)
DARI album
GRUP OLEH release_year, penjualan

Ini biasanya akan menghasilkan lebih banyak hasil daripada pengelompokan berdasarkan satu kolom:

++++
| release_year | penjualan | hitung (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

Perhatikan bahwa, dalam contoh kecil kami, hanya dua album yang memiliki tahun rilis dan jumlah penjualan yang sama (28 di tahun 1977).

Fungsi Agregat Berguna

Selain COUNT, beberapa fungsi bekerja dengan baik dengan GROUP. Setiap fungsi mengembalikan nilai berdasarkan rekaman milik setiap grup hasil.

  • COUNT () mengembalikan jumlah total rekaman yang cocok.
  • SUM () mengembalikan total semua nilai dalam kolom tertentu yang ditambahkan.
  • MIN () mengembalikan nilai terkecil dalam kolom tertentu.
  • MAX () mengembalikan nilai terbesar dalam kolom tertentu.
  • AVG () mengembalikan rata-rata rata-rata. Ini setara dengan SUM () / COUNT ().

Anda juga dapat menggunakan fungsi ini tanpa klausa GROUP:

PILIH AVG (penjualan) DARI album
++
| AVG (penjualan) |
++
| 19.1111 |
++

Menggunakan GROUP BY Dengan Klausa WHERE

Sama seperti SELECT biasa, Anda masih dapat menggunakan WHERE untuk memfilter set hasil:

PILIH artist_id, COUNT (*)
DARI album
WHERE release_year> 1990
GRUP OLEH artist_id
+++
| artist_id | JUMLAH (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

Sekarang Anda hanya memiliki album yang dirilis setelah tahun 1990, dikelompokkan berdasarkan artis. Anda juga dapat menggunakan join dengan klausa WHERE, secara terpisah dari GROUP BY:

PILIH r.name, COUNT (*) AS album
DARI album l, artis r
DI MANA artist_id = r.id
DAN release_year> 1990
GRUP OLEH artist_id
+++
| nama | album |
+++
| Nirwana | 1 |
| Adele | 2 |
+++

Namun, perhatikan bahwa jika Anda mencoba memfilter berdasarkan kolom gabungan:

PILIH r.name, COUNT (*) AS album
DARI album l, artis r
DI MANA artist_id = r.id
DAN album> 2
GRUP OLEH artist_id;

Anda akan mendapatkan kesalahan:

ERROR 1054 (42S22): Kolom 'album' di kolom 'di mana klausa' tidak diketahui

Kolom berdasarkan data agregat tidak tersedia untuk klausa WHERE.

Menggunakan Klausa HAVING

Jadi, bagaimana Anda memfilter kumpulan hasil setelah pengelompokan dilakukan? Itu HAVING klausul berkaitan dengan kebutuhan ini:

PILIH r.name, COUNT (*) AS album
DARI album l, artis r
DI MANA artist_id = r.id
GRUP OLEH artist_id
MEMILIKI album> 1;

Perhatikan bahwa klausa HAVING muncul setelah GROUP BY. Jika tidak, ini pada dasarnya adalah penggantian sederhana WHERE dengan HAVING. Hasilnya adalah:

+++
| nama | album |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++

Anda masih dapat menggunakan kondisi WHERE untuk memfilter hasil sebelum pengelompokan. Ini akan bekerja bersama dengan klausa HAVING untuk pemfilteran setelah pengelompokan:

PILIH r.name, COUNT (*) AS album
DARI album l, artis r
DI MANA artist_id = r.id
DAN release_year> 1990
GRUP OLEH artist_id
MEMILIKI album> 1;

Hanya satu artis dalam database kami yang merilis lebih dari satu album setelah tahun 1990:

+++
| nama | album |
+++
| Adele | 2 |
+++

Menggabungkan Hasil Dengan GROUP BY

Pernyataan GROUP BY adalah bagian bahasa SQL yang sangat berguna. Ini dapat memberikan informasi ringkasan data, untuk halaman konten, misalnya. Ini adalah alternatif yang sangat baik untuk mengambil data dalam jumlah besar. Database menangani beban kerja ekstra ini dengan baik karena desainnya membuatnya optimal untuk pekerjaan tersebut.

Setelah Anda memahami pengelompokan dan cara menggabungkan beberapa tabel, Anda akan dapat memanfaatkan sebagian besar kecanggihan database relasional.

Surel
Bagaimana Mengkueri Beberapa Tabel Database Sekaligus Dengan SQL Bergabung

Pelajari cara menggunakan gabungan SQL untuk menyederhanakan kueri, menghemat waktu, dan membuat Anda merasa seperti pengguna kekuatan SQL.

Topik-topik terkait
  • Pemrograman
  • SQL
Tentang Penulis
Bobby Jack (28 Artikel Dipublikasikan)

Bobby adalah penggemar teknologi yang bekerja sebagai pengembang perangkat lunak selama hampir dua dekade. Dia sangat menyukai game, bekerja sebagai Editor Ulasan di Majalah Switch Player, dan tenggelam dalam semua aspek penerbitan online & pengembangan web.

Selebihnya Dari Bobby Jack

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk mendapatkan tip teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Satu langkah lagi…!

Harap konfirmasi alamat email Anda di email yang baru saja kami kirimkan kepada Anda.

.