- 1 1. Pendahuluan: Gambaran Umum GROUP BY
- 2 2. Cara Dasar Menggunakan GROUP BY
- 3 3. Kombinasi GROUP BY dengan Fungsi Agregasi
- 4 4. Penyaringan dengan HAVING
- 5 5. Menggunakan GROUP BY dengan ORDER BY
- 6 6. Penggunaan Lanjutan GROUP BY: WITH ROLLUP
- 7 7. Perbedaan GROUP BY dan DISTINCT
- 8 8. Optimasi Performa GROUP BY di MySQL
- 9 9. Kesimpulan: Cara Efektif Menggunakan GROUP BY
1. Pendahuluan: Gambaran Umum GROUP BY
Dalam pengelolaan basis data dengan jumlah data yang besar, alat yang sangat kuat untuk mengelompokkan dan merangkum data secara efisien adalah klausa GROUP BY. GROUP BY digunakan untuk mengelompokkan data berdasarkan kolom tertentu, lalu melakukan agregasi pada setiap kelompok. Misalnya, ketika ingin menghitung total penjualan untuk setiap kategori produk, klausa ini memungkinkan kita mendapatkan data yang dibutuhkan dengan mudah.
Dengan menggunakan klausa GROUP BY, data dapat diatur dalam format yang lebih mudah dipahami secara visual. Selain itu, kita bisa memanfaatkan fungsi agregasi (SUM
, COUNT
, AVG
, dll.) untuk melakukan analisis yang lebih mendalam.
2. Cara Dasar Menggunakan GROUP BY
Klausa GROUP BY memungkinkan kita mengelompokkan data berdasarkan kolom yang ditentukan dan menghitung agregasi untuk setiap kelompok. Dengan cara ini, ringkasan atau statistik berdasarkan kategori atau kondisi tertentu dapat diperoleh dengan mudah.
Sintaks Dasar
SELECT nama_kolom, fungsi_agregasi(nama_kolom)
FROM nama_tabel
GROUP BY nama_kolom;
Contoh
Jika ingin menghitung total penjualan per kategori produk, query ditulis seperti berikut:
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category;
Query ini menghitung total penjualan untuk setiap kategori produk.
Contoh Hasil
product_category | SUM(sales_amount) |
---|---|
Elektronik | 100,000 |
Makanan | 50,000 |
Pakaian | 75,000 |

3. Kombinasi GROUP BY dengan Fungsi Agregasi
Dengan menggabungkan GROUP BY dan fungsi agregasi, kita bisa merangkum data per kelompok dan mendapatkan statistiknya. Beberapa fungsi agregasi yang sering digunakan di MySQL adalah:
- SUM(): Menghitung jumlah total data numerik.
- COUNT(): Menghitung jumlah baris data.
- AVG(): Menghitung rata-rata data numerik.
- MAX(): Mengambil nilai maksimum.
- MIN(): Mengambil nilai minimum.
Contoh Query
Untuk mengambil total penjualan dan jumlah transaksi per kategori produk:
SELECT product_category, SUM(sales_amount), COUNT(*)
FROM sales
GROUP BY product_category;
Query ini menampilkan total penjualan dan jumlah transaksi untuk setiap product_category
.
4. Penyaringan dengan HAVING
Klausa HAVING digunakan untuk memberikan kondisi tambahan pada data yang sudah dikelompokkan oleh GROUP BY. Keunikan HAVING adalah dapat memfilter berdasarkan hasil fungsi agregasi. Ini berbeda dengan klausa WHERE yang menyaring data sebelum proses agregasi.
Contoh Query
Jika hanya ingin menampilkan kategori dengan total penjualan lebih dari 1000:
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
HAVING SUM(sales_amount) > 1000;
Query ini hanya menampilkan kategori produk dengan total penjualan lebih dari 1000.

5. Menggunakan GROUP BY dengan ORDER BY
Setelah data dikelompokkan menggunakan GROUP BY, kita bisa menampilkan hasilnya secara terurut dengan klausa ORDER BY. Klausa ini mengurutkan data berdasarkan kolom yang ditentukan dalam urutan naik (ASC
) atau turun (DESC
).
Contoh Query
Untuk mengurutkan kategori produk berdasarkan total penjualan dari terbesar ke terkecil:
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
ORDER BY SUM(sales_amount) DESC;
Query ini menampilkan kategori produk dengan urutan penjualan tertinggi terlebih dahulu.
6. Penggunaan Lanjutan GROUP BY: WITH ROLLUP
WITH ROLLUP ditambahkan pada GROUP BY untuk menghitung total keseluruhan secara otomatis selain hasil per kelompok. Fitur ini sangat berguna untuk laporan ringkasan.
Contoh Query
Untuk menampilkan total penjualan tiap kota sekaligus total keseluruhan:
SELECT city, SUM(sales_amount)
FROM sales
GROUP BY city WITH ROLLUP;
Query ini menampilkan total penjualan tiap kota beserta total keseluruhan.

7. Perbedaan GROUP BY dan DISTINCT
DISTINCT dan GROUP BY sama-sama dipakai untuk merapikan data, tetapi fungsinya berbeda. DISTINCT hanya menghapus data duplikat, sedangkan GROUP BY mengelompokkan data untuk keperluan agregasi.
Perbandingan Query
Contoh DISTINCT untuk mengambil daftar kategori produk unik:
SELECT DISTINCT product_category
FROM sales;
Contoh GROUP BY untuk menghitung jumlah penjualan per kategori produk:
SELECT product_category, COUNT(*)
FROM sales
GROUP BY product_category;
Perbedaannya adalah DISTINCT hanya menghapus duplikasi, sedangkan GROUP BY melakukan perhitungan agregasi.
8. Optimasi Performa GROUP BY di MySQL
Saat menangani dataset besar, optimasi performa GROUP BY sangat penting. Diperlukan konfigurasi dan perbaikan query agar pemrosesan tetap efisien.
1. Menggunakan Index
Menambahkan index pada kolom yang digunakan di GROUP BY akan mempercepat pencarian dan pengelompokan.
CREATE INDEX idx_category ON sales(product_category);
Dengan index, performa query dapat meningkat signifikan.
2. Menyesuaikan Pengaturan Memori
Pengaturan parameter seperti sort_buffer_size
dan tmp_table_size
membantu mempercepat query.
SET GLOBAL sort_buffer_size = 2M;
SET GLOBAL tmp_table_size = 64M;
3. Menyederhanakan Query
Query yang kompleks menurunkan performa. Hindari penggunaan JOIN atau subquery berlebihan.
4. Fitur Versi MySQL
Sejak MySQL 8.0, tersedia hash-based grouping yang lebih cepat daripada metode sorting tradisional.
SET optimizer_switch = 'hash_join=on';
5. Menggunakan Query Cache
Pada MySQL 5.7 atau sebelumnya, query cache dapat mempercepat eksekusi query berulang.
SET GLOBAL query_cache_size = 16M;
SET GLOBAL query_cache_type = 1;
6. Pertimbangan Partisi
Dengan fitur partitioning, tabel besar dapat dibagi untuk meningkatkan kecepatan query.
ALTER TABLE sales PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p0 VALUES LESS THAN (2021),
PARTITION p1 VALUES LESS THAN (2022),
PARTITION p2 VALUES LESS THAN (2023)
);
9. Kesimpulan: Cara Efektif Menggunakan GROUP BY
Klausa GROUP BY sangat berguna untuk mengelompokkan data dan melakukan agregasi. Dalam artikel ini kita telah mempelajari penggunaan dasar, kombinasi dengan HAVING dan ORDER BY, serta fitur lanjutan seperti WITH ROLLUP. Selain itu, kita juga membahas optimasi performa dengan index, pengaturan memori, dan fitur MySQL terbaru seperti hash-based grouping.
Dengan memanfaatkan fitur tambahan seperti query cache dan partitioning, pengolahan data dalam skala besar dapat dilakukan lebih efisien. Gunakanlah teknik optimasi sesuai versi MySQL yang digunakan untuk meningkatkan efisiensi analisis data Anda.