Meskipun pengelompokan berdasarkan satu kolom adalah hal yang umum, mengelompokkan berdasarkan beberapa kolom memungkinkan Anda untuk meringkas dataset besar dengan mengelompokkan baris yang memiliki nilai yang sama, sehingga lebih mudah mengidentifikasi pola, tren, dan outlier.
Dalam panduan ini, saya akan menjelaskan cara kerja klausa GROUP BY, metode pengelompokan lanjutan, dan praktik terbaiknya. Jika Anda baru dalam SQL, pertimbangkan untuk memulai dengan kursus Introduction to SQL atau Intermediate SQL untuk membangun fondasi yang kuat. Selain itu, saya menemukan SQL Basics Cheat Sheet yang dapat Anda unduh sangat membantu sebagai referensi karena berisi semua fungsi SQL yang paling umum.
Dasar-dasar GROUP BY di SQL
Sebelum saya menjelaskan cara mengelompokkan berdasarkan beberapa kolom di SQL, mari pahami terlebih dahulu konsep dasar dari klausa GROUP BY.
Prinsip dasar GROUP BY
Klausa GROUP BY dalam SQL mengatur data yang identik ke dalam grup. Klausa ini memindai baris di basis data lalu mengelompokkan baris dengan nilai yang sama pada kolom yang ditentukan, sehingga memungkinkan agregasi data di dalam grup-grup tersebut.
Anda dapat menggunakan klausa GROUP BY bersama fungsi agregat seperti COUNT(), SUM(), AVG(), MIN(), dan MAX() untuk melakukan perhitungan ringkasan pada setiap grup baris.
Misalnya, Anda menganalisis data penjualan dan ingin mengetahui total pendapatan per wilayah. GROUP BY memungkinkan Anda mengelompokkan penjualan berdasarkan wilayah dan menghitung jumlahnya untuk setiap wilayah dalam satu kueri.
Transisi dari pengelompokan satu kolom ke banyak kolom
Basis data memproses klausa GROUP BY pada satu kolom dengan memindai baris dan membaginya menurut nilai berbeda pada kolom tersebut. Setiap nilai berbeda membentuk satu grup, dan fungsi agregasi menghitung hasil di dalam setiap grup.
Namun, ketika Anda menambahkan beberapa kolom, SQL mengelompokkan data berdasarkan setiap kombinasi unik dari kolom-kolom tersebut. Artinya, basis data membagi data ke dalam grup yang lebih kecil dan lebih terperinci yang ditentukan oleh semua nilai kolom yang ditentukan.
Pendekatan partisi ini memungkinkan agregasi multidimensi. Ini berguna untuk business intelligence dan analitik yang mendalam. Pendekatan ini memungkinkan analisis mendalam dengan meringkas data pada perpotongan beberapa dimensi. Misalnya, Anda dapat mengelompokkan penjualan berdasarkan wilayah dan kategori produk.
Memahami Pengelompokan Banyak Kolom
Seperti yang Anda lihat, mengelompokkan data berdasarkan beberapa kolom memberi lebih banyak wawasan. Sekarang mari kita lihat bagaimana SQL menangani pengelompokan ini.
Mekanisme pengelompokan banyak kolom
Saat Anda mengelompokkan lebih dari satu kolom di SQL, mesin basis data memperlakukan kombinasi kolom sebagai kunci komposit. Setiap kombinasi unik ini membentuk satu grup yang berbeda. Misalnya, mengelompokkan data penjualan berdasarkan region dan product_type menghasilkan grup terpisah untuk setiap pasangan unik, seperti ('West', 'Electronics'), ('East', 'Furniture'), dan seterusnya.
Ini menghasilkan pola subpengelompokan hierarkis, di mana kolom pertama membuat grup utama, kolom kedua membagi lebih lanjut grup utama tersebut menjadi subgrup, dan seterusnya. Pengelompokan berlapis ini meningkatkan tingkat kehalusan data dengan memecah informasi ke dalam kategori yang lebih rinci.
Perlu Anda catat juga bahwa ada perbedaan antara pengelompokan hierarkis dan non-hierarkis. Pengelompokan hierarkis mengikuti pengelompokan kolom dan subpengelompokan kolom dalam urutan tertentu. Di sisi lain, pengelompokan non-hierarkis memperlakukan setiap kolom sebagai dimensi lain, dan tidak mengikuti hierarki yang melekat. Meski begitu, pengelompokan non-hierarkis menciptakan kombinasi yang berguna untuk analisis, seperti saat Anda ingin mengelompokkan penjualan produk berdasarkan musim.
Pentingnya dan implikasi urutan kolom
Dalam SQL, urutan Anda mencantumkan kolom dalam klausa GROUP BY sangat penting. Saat Anda mengelompokkan berdasarkan beberapa kolom, SQL memperlakukan kolom-kolom tersebut bersama-sama sebagai kunci gabungan, seperti menyatukan beberapa bagian untuk mengidentifikasi setiap grup secara unik.
SQL memproses kolom dari kiri ke kanan. Artinya, SQL terlebih dahulu mengelompokkan data berdasarkan kolom pertama yang Anda cantumkan, lalu di dalam masing-masing grup itu, SQL akan mengelompokkan lebih lanjut berdasarkan kolom berikutnya, dan seterusnya. Urutan ini dapat memengaruhi seberapa efisien basis data menangani kueri, bagaimana indeks digunakan, dan bagaimana pengelompokan sementara dibangun, terutama saat bekerja dengan dataset besar.
Sebagai contoh, jika Anda ingin mengelompokkan data berdasarkan wilayah dan produk, data terlebih dahulu dikelompokkan berdasarkan wilayah, lalu di dalam setiap wilayah, dikelompokkan berdasarkan produk. Namun jika Anda menukar urutannya menjadi (produk, wilayah), Anda mengubah hierarki pengelompokan, yang dapat menghasilkan hasil dan interpretasi yang berbeda dalam laporan Anda.
Sintaks dan Mekanisme
Mari kita telaah sintaks dan variasi klausa GROUP BY di SQL untuk memahaminya sepenuhnya.
Sintaks untuk GROUP BY banyak kolom
Untuk menggunakan klausa GROUP BY pada beberapa kolom, Anda harus mencantumkan setiap kolom dalam pernyataan SELECT, dipisahkan dengan koma. Basis data kemudian akan mengelompokkan baris berdasarkan kombinasi unik dari nilai kolom-kolom tersebut.
SELECT column1, column2, AGGREGATE_FUNCTION(column3)FROM table_name
GROUPBY column1, column2;Didukung oleh
Selalu pastikan bahwa semua kolom yang digunakan dalam pernyataan SELECT, yang bukan bagian dari fungsi agregat, harus muncul dalam klausa GROUP BY untuk menghindari kesalahan dan memastikan agregasi yang mudah dibaca.
Misalkan Anda memiliki tabel Sales dengan struktur berikut:
Kueri di bawah ini mengelompokkan data berdasarkan kolom region dan product_category. Kemudian menghitung total_sales untuk setiap kombinasi grup.
-- Group Sales by region and product categorySELECT region, product_category,SUM(quantity)AS total_sales
FROM Sales
GROUPBY region, product_category;Didukung oleh
Variasi sintaks lanjutan
Berikut adalah berbagai metode untuk menggunakan klausa GROUP BY pada beberapa kolom di SQL:
Referensi kolom bernomor
Alih-alih menggunakan nama kolom, SQL memungkinkan Anda menunjukkan posisi kolom dalam klausa GROUP BY. Dari contoh sebelumnya, 1 merujuk ke kolom region dan 2 ke kolom product_category. Metode ini didukung di MySQL dan PostgreSQL, tetapi tidak di SQL Server.
-- Group Sales by region and product categorySELECT region, product_category,SUM(quantity)AS total_sales
FROM Sales
GROUPBY1,2;Didukung oleh
Pengelompokan berbasis ekspresi
Anda juga dapat mengelompokkan berdasarkan ekspresi turunan atau nilai yang dihitung. Ini berguna untuk mengelompokkan berdasarkan data yang ditransformasi, seperti tahun dari tanggal atau substring. Misalnya, kueri di bawah ini mengelompokkan penjualan berdasarkan bulan yang diturunkan dari sale_date.
-- Group Sales by month derived from date columnSELECT
DATENAME(MONTH, sale_date)AS sale_month,COUNT(*)AS total_orders
FROM Sales
GROUPBY DATENAME(MONTH, sale_date),MONTH(sale_date)ORDERBYMONTH(sale_date);Didukung oleh
Memilih beberapa kolom tetapi mengelompokkan hanya satu
SQL memungkinkan Anda memilih beberapa kolom sambil mengelompokkan hanya satu, tetapi hanya jika kolom tambahan digunakan di dalam fungsi agregat. Pada contoh di bawah, hanya region yang ada dalam klausa GROUP BY, sementara product_id digunakan dalam fungsi agregat (COUNT(DISTINCT)), sehingga kueri valid.
-- Group Sales by region onlySELECT region,COUNT(DISTINCT sale_id)AS product_variety
FROM Sales
GROUPBY region;Didukung oleh
Saya merekomendasikan untuk mencoba proyek Analyzing and Formatting PostgreSQL Sales Data untuk memahami cara memanipulasi data di PostgreSQL. Selain itu, MySQL Basics Cheat Sheet akan menjadi panduan referensi yang berguna untuk kueri dasar tabel, memfilter data, dan mengagregasi data, terutama jika Anda lebih suka menggunakan MySQL.
Fungsi Agregat dengan GROUP BY
Keunggulan klausa GROUP BY di SQL adalah Anda dapat menggunakannya bersama fungsi agregat untuk mendapatkan ringkasan data yang dikelompokkan.
Fungsi agregat umum dalam pengelompokan multi-kolom
Fungsi agregat menawarkan wawasan multidimensi di berbagai kombinasi data saat mengelompokkan berdasarkan beberapa kolom. Berikut fungsi yang umum digunakan dengan klausa GROUP BY:
SUM(): Menjumlahkan semua nilai dalam kolom numerik untuk setiap grup.
COUNT(): Menghitung jumlah baris atau nilai non-null di setiap grup.
AVG(): Menghitung nilai rata-rata dalam setiap grup.
MIN(): Menemukan nilai terkecil di setiap grup.
MAX(): Menemukan nilai terbesar di setiap grup.
Sebagai contoh, kueri di bawah ini menghitung total penjualan dan jumlah catatan penjualan untuk setiap kombinasi wilayah dan kategori produk
-- Group by region, product_category then aggregate
SELECT region, product_category, SUM(quantity) AS total_sales, COUNT(*) AS sales_count
FROM Sales
GROUP BY region, product_category;Didukung oleh
GROUP BY tanpa fungsi agregat
Pada contoh di atas, Anda telah melihat bahwa klausa GROUP BY digunakan bersama fungsi agregat. Namun, Anda dapat menggunakannya tanpa agregasi jika Anda ingin mengelompokkan baris berdasarkan kolom yang ditentukan, tetapi tanpa ringkasan.
Misalnya, kueri di bawah ini menghasilkan pasangan unik dari wilayah dan kategori produk tanpa agregasi. Oleh karena itu, Anda dapat menggunakan metode ini untuk memeriksa konsistensi data.
--Group by multiple columns without aggregateSELECT region, product_category
FROM Sales
GROUPBY region, product_category;Didukung oleh
Fitur Pengelompokan Lanjutan
Setelah kita melihat cara mengelompokkan berdasarkan beberapa kolom, mari lihat berbagai operasi pengelompokan lanjutan yang digunakan dengan klausa GROUP BY.
Operasi ROLLUP
Operasi ROLLUP dibangun di atas klausa GROUP BY standar dengan membuat tingkat ringkasan yang naik (roll up) sepanjang kolom yang ditentukan. Selain menampilkan grup terperinci, operasi ini juga menambahkan subtotal dan total keseluruhan dengan mengagregasi selangkah demi selangkah dari kanan ke kiri melalui kolom yang Anda kelompokkan.
Sebagai contoh, dalam kueri di bawah ini, Anda mendapatkan total_quantity untuk setiap kombinasi region dan product_category. Hasilnya mencakup subtotal untuk setiap wilayah (di mana product_category muncul sebagai NULL) dan total keseluruhan yang menjumlahkan semuanya di seluruh wilayah dan kategori.
-- Group by region, product_category and ROLLUP by regionSELECT region, product_category,SUM(quantity)AS total_quantity
FROM Sales
GROUPBY ROLLUP(region, product_category);Didukung oleh
Operasi CUBE
Operasi CUBE menghasilkan semua kombinasi yang mungkin dari kolom pengelompokan. Tidak seperti operasi ROLLUP yang menghasilkan hierarki, CUBE menghasilkan kubus data (data cube) agregasi yang lengkap.
Operasi ini menyediakan tabulasi silang agregasi untuk setiap subset dari kolom yang ditentukan. Output dari operasi CUBE mencakup ringkasan untuk setiap kolom, setiap kombinasi kolom, dan total keseluruhan.
Misalnya, jika kita melakukan kueri pada tabel di atas dan mengelompokkan berdasarkan kolom (region, product_category), operasi CUBE akan menghasilkan kombinasi berikut:
(region, product_category)
(region, NULL)
(NULL, product_category)
(NULL, NULL) yang merupakan total keseluruhan
-- Group by multiple columns using CUBE operationSELECT region, product_category,SUM(quantity)AS total_quantity
FROM Sales
GROUPBY CUBE(region, product_category);Didukung oleh
GROUPING SETS dan metadata
Jika Anda menginginkan kontrol yang lebih fleksibel atas bagaimana data Anda dikelompokkan, maka operasi GROUPING SETS memungkinkan Anda secara eksplisit mendefinisikan beberapa pengelompokan dalam satu kueri.
Dalam hal ini, fungsi GROUPING() menyediakan metadata tentang kolom mana yang diagregasi di setiap baris hasil, mengidentifikasi NULL yang merepresentasikan baris subtotal atau total, bukan data yang benar-benar hilang.
-- Group by multiple columns using GROUPING SETS operationSELECT region, product_category,SUM(quantity)AS total_quantity,
GROUPING(region)AS region_grouping,
GROUPING(product_category)AS product_grouping
FROM Sales
GROUPBY GROUPING SETS ((region, product_category),(region),(product_category),());Didukung oleh
Pertimbangan Performa dan Optimasi
Saat menulis kueri yang mengelompokkan berdasarkan beberapa kolom, penting untuk mengoptimalkannya demi efisiensi yang lebih baik dan kinerja basis data secara keseluruhan. Di bawah ini beberapa tips praktis yang saya gunakan untuk membantu optimasi kueri dan pengelolaan sumber daya
Teknik optimasi kueri
Agar kueri Anda berjalan lancar dan menggunakan sumber daya minimal:
Identifikasi hambatan performa: Kueri GROUP BY bisa melambat saat berhadapan dengan dataset besar karena harus memindai, mengurutkan, dan mengagregasi banyak data. Untuk menghindari masalah ini, selalu lakukan filter lebih awal dengan klausa WHERE dan hindari mengambil data yang tidak Anda butuhkan.
Gunakan pengindeksan secara efektif: Mengindeks kolom mempercepat performa GROUP BY. Membuat indeks komposit pada kolom yang digunakan dalam klausa GROUP BY membantu mesin basis data dengan cepat menemukan dan mengelompokkan baris tanpa pemindaian tabel penuh atau pengurutan yang mahal.
Batasi kolom: Hanya sertakan kolom yang diperlukan untuk pengelompokan dan analisis Anda guna mengurangi kompleksitas dan meningkatkan performa.
Manfaatkan rencana kueri: Jika tersedia, periksa execution plan atau gunakan petunjuk kueri untuk membimbing optimizer basis data ke strategi terbaik.
Alokasi memori dan sumber daya komputasi
Memori berperan besar dalam seberapa baik kueri GROUP BY berjalan. Mengurutkan dan mengelompokkan data sering memerlukan penyimpanan data sementara di memori. Jika memori tidak cukup, kinerja akan menurun secara signifikan.
Untuk mengelola sumber daya dengan lebih baik:
Pastikan basis data Anda memiliki alokasi memori yang cukup untuk menangani tugas agregasi ini.
Gunakan fitur pemrosesan paralel, jika didukung basis data Anda, untuk membagi beban kerja ke beberapa CPU.
Pantau penggunaan penyimpanan sementara dan cache untuk menghindari hambatan.
Ingat juga bahwa ukuran data Anda sangat memengaruhi performa. Dataset besar dengan banyak kombinasi grup unik menggunakan lebih banyak memori dan daya pemrosesan. Teknik seperti mempartisi tabel besar, membuat tabel ringkasan terlebih dahulu, atau menggunakan materialized view membantu menjaga semuanya tetap terkendali.
Integrasi dengan Klausa SQL Lain
Klausa GROUP BY bekerja baik dengan klausa SQL lain, membuat kueri Anda lebih kuat dan fleksibel. Berikutnya, Anda akan melihat contoh praktis cara menggabungkan GROUP BY dengan berbagai klausa SQL untuk meningkatkan analisis Anda.
Interaksi dengan klausa WHERE dan HAVING
Klausa WHERE memfilter baris sebelum pengelompokan terjadi. Klausa ini membatasi dataset sehingga hanya baris yang diperlukan yang disertakan dalam proses agregasi. Misalnya, kueri di bawah ini mengelompokkan berdasarkan region and product_category` tetapi hanya menyertakan catatan di mana region adalah ‘North.’
-- Group by multiple columns, filter using WHERE clauseSELECT region, product_category,SUM(quantity)AS total_quantity
FROM Sales
WHERE region ='North'GROUPBY region, product_category;Didukung oleh
Klausa HAVING, di sisi lain, memfilter setelah agregasi. Klausa ini digunakan untuk membatasi grup mana yang muncul dalam hasil akhir berdasarkan nilai agregat. Kueri di bawah ini mengelompokkan berdasarkan region and product_category tetapi hanya menyertakan catatan di mana total_quantity` lebih dari 5.
-- Group by multiple columns, filter using HAVING clauseSELECT region, product_category,SUM(quantity)AS total_quantity
FROM Sales
GROUPBY region, product_category
HAVINGSUM(quantity)>4;Didukung oleh
Interaksi dengan operasi ORDER BY dan JOIN
Dalamurutan eksekusi SQL, tKlausa ORDER BY berada setelah klausa GROUP BY dan digunakan untuk mengurutkan hasil yang telah dikelompokkan, sehingga lebih mudah dibaca atau diproses lebih lanjut. Dengan menggunakan indeks yang tepat dan memilih urutan kolom dengan cermat dalam klausa ORDER BY, Anda dapat mempercepat kueri dengan mengurangi pekerjaan yang diperlukan untuk mengurutkan data.
Sebagai contoh, kueri ini mengelompokkan data berdasarkan region dan product_category, lalu mengurutkan hasil sehingga grup dengan total_quantity tertinggi muncul terlebih dahulu.
-- Group by multiple columns, ORDER BY total_quantitySELECT region, product_category,SUM(quantity)AS total_quantity
FROM Sales
GROUPBY region, product_category
ORDERBY total_quantity DESC;Didukung oleh
Anda juga dapat menggabungkan operasi JOIN dengan klausa GROUP BY untuk mengelompokkan data di beberapa tabel terkait. Anda harus berhati-hati saat menggunakan metode ini, karena dapat menambah kompleksitas akibat penggabungan data berukuran lebih besar.
-- Retrieve the number of sales per region and product categorySELECT
c.region,
p.product_category,COUNT(*)AS sales_count
-- Join customer, sales, and product dataFROM customers c
JOIN sales_data s
ON c.customer_id = s.customer_id
JOIN products p
ON s.product_id = p.product_id
-- Group results by region and product categoryGROUPBY c.region, p.product_category
-- Order results by region first, then sales count in descending orderORDERBY c.region, sales_count DESC;Didukung oleh
Saya menyarankan mengikuti kursus Joining Data in SQL untuk mempelajari berbagai jenis join dan cara menggunakannya dalam kueri bertingkat. Anda dapat mengunduh panduan SQL Joins Cheat Sheet kami sebagai referensi untuk mempelajari lebih lanjut tentang penggabungan data di SQL.
Interaksi dengan ekspresi CASE dalam GROUP BY
Ekspresi CASE dalam GROUP BY memungkinkan pengelompokan khusus dengan mentransformasikan nilai kolom secara dinamis di dalam proses pengelompokan.
Kueri di bawah ini mengkategorikan produk berdasarkan rentang harga dan menghitung total kuantitas yang terjual per wilayah & kategori produk.
-- Categorize products by price range and count total quantity sold per region & product categorySELECT
region,
product_category,-- Categorize based on product priceCASEWHEN price >=1000THEN'High-Priced Products'WHEN price >=500THEN'Mid-Priced Products'ELSE'Low-Priced Products'ENDAS price_category,SUM(quantity)AS total_quantity
FROM Sales
-- Group by region, product category, and price categoryGROUPBY
region,
product_category,CASEWHEN price >=1000THEN'High-Priced Products'WHEN price >=500THEN'Mid-Priced Products'ELSE'Low-Priced Products'END-- Sort results for easier interpretationORDERBY
region,
product_category,
total_quantity DESC;Didukung oleh
Pola Umum dan Praktik Terbaik
Seiring Anda terus menggunakan klausa GROUP BY untuk mengelompokkan beberapa kolom, Anda akan mengenali pola berulang untuk meningkatkan penggunaannya. Kita akan membahas kejadian umum ini beserta pertimbangan performanya.
Pola analisis hierarkis dan temporal
Anda mungkin memperhatikan bahwa sebagian besar dataset memiliki hierarki yang melekat, seperti geografi (benua → negara → kota), kategori produk, atau struktur organisasi. Oleh karena itu, klausa GROUP BY ideal untuk meringkas data pada berbagai tingkat hierarki ini.
Saat dihadapkan dengan data bertanggal dan bertimestamp, analisis temporal dapat membantu mengidentifikasi tren, musiman, dan perilaku berbasis waktu dengan mengelompokkan berdasarkan bagian tanggal seperti tahun, kuartal, bulan, atau hari.
Sebelumnya, kita membahas dua jenis pola pengelompokan. Pengelompokan hierarkis melibatkan kolom yang memiliki hubungan bertingkat alami, seperti mengelompokkan terlebih dahulu berdasarkan departemen, lalu di dalam setiap departemen berdasarkan tim. Sebaliknya, pengelompokan non-hierarkis mencampurkan dimensi yang tidak terkait, seperti jenis produk dan metode pembayaran, menampilkan kombinasi tanpa urutan atau struktur yang tersirat.
Pola pengelompokan berorientasi performa
Saat menggunakan GROUP BY dengan beberapa kolom, Anda dapat meningkatkan performa dengan mengikuti tips praktis berikut:
Batasi kolom pengelompokan: Selalu pastikan Anda mengelompokkan berdasarkan kolom yang diperlukan untuk analisis guna mengurangi beban komputasi grup.
Optimasi indeks: Pastikan kolom yang dikelompokkan diindeks untuk mempercepat performa kueri dengan membantu basis data menangani operasi pengurutan lebih efisien.
Filter sedini mungkin: Gunakan klausa WHERE untuk membatasi dataset Anda sebelum pengelompokan guna mengurangi jumlah data yang diproses.
Gunakan rencana dan petunjuk kueri: Tinjau execution plan atau tambahkan petunjuk kueri jika didukung basis data Anda untuk membantu mengoptimalkan proses pengelompokan.
Manfaatkan fitur SQL lanjutan: Pertimbangkan menggunakan teknik seperti ROLLUP atau GROUPING SETS untuk membuat ringkasan lebih efisien dan menghindari menjalankan kueri berulang, terutama saat bekerja dengan data hierarkis atau multidimensi.
Menghapus duplikasi dan pembersihan data
GROUP BY juga bisa menjadi cara yang berguna untuk membersihkan data Anda dengan menghapus duplikasi berdasarkan bidang tertentu. Ini berguna ketika dataset Anda memiliki beberapa baris yang identik atau sebagian duplikat.
Sebagai contoh, untuk menghapus catatan penjualan duplikat, Anda akan mengelompokkan berdasarkan region, product_category, dan product_name, lalu memilih harga tertinggi per grup untuk mempertahankan catatan yang paling relevan.
-- Remove duplicate sales records by keeping only unique combinations-- of region, product_category, and product_nameSELECT
region,
product_category,
product_name,MAX(price)AS price,SUM(quantity)AS total_quantity
FROM Sales
GROUPBY
region,
product_category,
product_name
ORDERBY
region,
product_category,
product_name;Didukung oleh
Pemecahan Masalah dan Jebakan Umum
Saat bekerja dengan GROUP BY pada beberapa kolom, ingatlah jebakan umum berikut:
Spesifikasi kolom dan masalah tipe data
Salah satu kesalahan yang paling sering terjadi dalam kueri GROUP BY terkait dengan spesifikasi kolom yang tidak benar. SQL mengharuskan when selecting multiple columns not wrapped dalam fungsi agregat, kolom-kolom tersebut harus disertakan dalam klausa GROUP BY. Jika tidak, akan terjadi kesalahan. Jadi, selalu sertakan kolom non-agregat dalam klausa GROUP BY jika disertakan dalam pernyataan SELECT.
Anda juga mungkin mengalami kesalahan jika data yang Anda kelompokkan memiliki ketidakcocokan, terutama saat Anda mengelompokkan berdasarkan ekspresi. Misalkan Anda mengelompokkan data berdasarkan tanggal yang diformat. Dalam kasus tersebut, Anda akan mendapatkan kesalahan jika nilai tanggal memiliki format atau tingkat presisi yang berbeda, sehingga menghasilkan hasil yang tidak terduga atau tidak benar.
Degradasi performa dan penanganan nilai null
Menggunakan kueri GROUP BY terkadang dapat memperlambat basis data Anda, terutama jika Anda mengelompokkan berdasarkan kolom dengan banyak nilai unik (kardinalitas tinggi) atau jika kolom-kolom tersebut tidak diindeks. Dataset besar juga memerlukan memori yang cukup untuk menangani langkah pengurutan dan pengelompokan, yang menambah beban.
Untuk menghindari masalah ini, selalu indeks kolom dan lakukan filter menggunakan WHERE untuk membatasi data yang Anda kueri.
Selain itu, penting untuk mengetahui bagaimana SQL menangani nilai NULL dalam pengelompokan: semua NULL dalam kolom pengelompokan diperlakukan sebagai satu grup yang sama, berapa pun jumlahnya. Namun, NULL tidak pernah dianggap sama dengan nilai aktual (non-NULL) mana pun, sehingga grup-grup tersebut tetap terpisah.
Kesimpulan
Menggunakan klausa GROUP BY untuk mengelompokkan beberapa kolom di SQL adalah teknik yang kuat yang memungkinkan analisis yang lebih dalam dan multidimensi dengan mengagregasi data di berbagai kombinasi bidang. Teknik ini memungkinkan analis melampaui ringkasan dasar dan mendapatkan lebih banyak wawasan tentang pola dan hubungan dalam data. Kapabilitas ini penting untuk pelaporan, pelacakan kinerja, dan pengambilan keputusan di lingkungan bisnis modern..
Seiring data tumbuh dalam kompleksitas dan volume, SQL tetap menjadi alat fundamental dalam analitik. Untuk semakin meningkatkan keterampilan Anda, pertimbangkan untuk mengeksplorasi window function, common table expressions (CTE), dan materialized view, yang membuka pintu bagi transformasi data dan alur kerja pelaporan yang lebih canggih.
Penulis teknis Data Science dengan pengalaman langsung dalam analitik data, business intelligence, dan data science. Saya menulis konten praktis berfokus industri tentang SQL, Python, Power BI, Databricks, dan rekayasa data, yang berakar pada pekerjaan analitik dunia nyata. Tulisan saya menjembatani kedalaman teknis dan dampak bisnis, membantu para profesional mengubah data menjadi keputusan yang meyakinkan.
FAQs
Bagaimana saya dapat menggunakan klausa HAVING dengan GROUP BY pada beberapa kolom?⌄
Anda dapat menggunakan klausa HAVING untuk memfilter hasil yang telah dikelompokkan berdasarkan nilai agregat setelah melakukan pengelompokan pada beberapa kolom.
Apa perbedaan antara GROUP BY dan window function?⌄
Klausa GROUP BY mengecilkan baris menjadi grup, sedangkan window function melakukan perhitungan di atas baris tanpa menguranginya, sehingga detail tingkat baris tetap terjaga.
Bagaimana saya dapat mengoptimalkan kueri GROUP BY di SQL Server?⌄
Untuk mengoptimalkan klausa GROUP BY di SQL Server, lakukan filter lebih awal menggunakan klausa WHERE, gunakan kolom yang diindeks, hindari, dan tinjau execution plan untuk penyetelan performa.
Dapatkah Anda menjelaskan penggunaan ROLLUP dan CUBE dengan GROUP BY?⌄
Fungsi ROLLUP menambahkan subtotal sepanjang hierarki, sementara CUBE menghasilkan semua kombinasi kolom yang dikelompokkan untuk tampilan ringkasan lengkap.
Bagaimana GROUP BY menangani nilai NULL pada beberapa kolom?⌄
Nilai NULL diperlakukan sebagai kunci grup yang valid, artinya semua baris dengan NULL pada kolom yang sama membentuk satu grup.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Meskipun pengelompokan berdasarkan satu kolom adalah hal yang umum, mengelompokkan berdasarkan beberapa kolom memungkinkan Anda untuk meringkas dataset besar dengan mengelompokkan baris yang memiliki nilai yang sama, sehingga lebih mudah mengidentifikasi pola, tren, dan outlier.
Dalam panduan ini, saya akan menjelaskan cara kerja klausa
GROUP BY, metode pengelompokan lanjutan, dan praktik terbaiknya. Jika Anda baru dalam SQL, pertimbangkan untuk memulai dengan kursus Introduction to SQL atau Intermediate SQL untuk membangun fondasi yang kuat. Selain itu, saya menemukan SQL Basics Cheat Sheet yang dapat Anda unduh sangat membantu sebagai referensi karena berisi semua fungsi SQL yang paling umum.Dasar-dasar GROUP BY di SQL
Sebelum saya menjelaskan cara mengelompokkan berdasarkan beberapa kolom di SQL, mari pahami terlebih dahulu konsep dasar dari klausa
GROUP BY.Prinsip dasar GROUP BY
Klausa
GROUP BYdalam SQL mengatur data yang identik ke dalam grup. Klausa ini memindai baris di basis data lalu mengelompokkan baris dengan nilai yang sama pada kolom yang ditentukan, sehingga memungkinkan agregasi data di dalam grup-grup tersebut.Anda dapat menggunakan klausa
GROUP BYbersama fungsi agregat sepertiCOUNT(),SUM(),AVG(),MIN(), danMAX()untuk melakukan perhitungan ringkasan pada setiap grup baris.Misalnya, Anda menganalisis data penjualan dan ingin mengetahui total pendapatan per wilayah.
GROUP BYmemungkinkan Anda mengelompokkan penjualan berdasarkan wilayah dan menghitung jumlahnya untuk setiap wilayah dalam satu kueri.Transisi dari pengelompokan satu kolom ke banyak kolom
Basis data memproses klausa
GROUP BYpada satu kolom dengan memindai baris dan membaginya menurut nilai berbeda pada kolom tersebut. Setiap nilai berbeda membentuk satu grup, dan fungsi agregasi menghitung hasil di dalam setiap grup.Namun, ketika Anda menambahkan beberapa kolom, SQL mengelompokkan data berdasarkan setiap kombinasi unik dari kolom-kolom tersebut. Artinya, basis data membagi data ke dalam grup yang lebih kecil dan lebih terperinci yang ditentukan oleh semua nilai kolom yang ditentukan.
Pendekatan partisi ini memungkinkan agregasi multidimensi. Ini berguna untuk business intelligence dan analitik yang mendalam. Pendekatan ini memungkinkan analisis mendalam dengan meringkas data pada perpotongan beberapa dimensi. Misalnya, Anda dapat mengelompokkan penjualan berdasarkan wilayah dan kategori produk.
Memahami Pengelompokan Banyak Kolom
Seperti yang Anda lihat, mengelompokkan data berdasarkan beberapa kolom memberi lebih banyak wawasan. Sekarang mari kita lihat bagaimana SQL menangani pengelompokan ini.
Mekanisme pengelompokan banyak kolom
Saat Anda mengelompokkan lebih dari satu kolom di SQL, mesin basis data memperlakukan kombinasi kolom sebagai kunci komposit. Setiap kombinasi unik ini membentuk satu grup yang berbeda. Misalnya, mengelompokkan data penjualan berdasarkan
regiondanproduct_typemenghasilkan grup terpisah untuk setiap pasangan unik, seperti ('West', 'Electronics'), ('East', 'Furniture'), dan seterusnya.Ini menghasilkan pola subpengelompokan hierarkis, di mana kolom pertama membuat grup utama, kolom kedua membagi lebih lanjut grup utama tersebut menjadi subgrup, dan seterusnya. Pengelompokan berlapis ini meningkatkan tingkat kehalusan data dengan memecah informasi ke dalam kategori yang lebih rinci.
Perlu Anda catat juga bahwa ada perbedaan antara pengelompokan hierarkis dan non-hierarkis. Pengelompokan hierarkis mengikuti pengelompokan kolom dan subpengelompokan kolom dalam urutan tertentu. Di sisi lain, pengelompokan non-hierarkis memperlakukan setiap kolom sebagai dimensi lain, dan tidak mengikuti hierarki yang melekat. Meski begitu, pengelompokan non-hierarkis menciptakan kombinasi yang berguna untuk analisis, seperti saat Anda ingin mengelompokkan penjualan produk berdasarkan musim.
Pentingnya dan implikasi urutan kolom
Dalam SQL, urutan Anda mencantumkan kolom dalam klausa GROUP BY sangat penting. Saat Anda mengelompokkan berdasarkan beberapa kolom, SQL memperlakukan kolom-kolom tersebut bersama-sama sebagai kunci gabungan, seperti menyatukan beberapa bagian untuk mengidentifikasi setiap grup secara unik.
SQL memproses kolom dari kiri ke kanan. Artinya, SQL terlebih dahulu mengelompokkan data berdasarkan kolom pertama yang Anda cantumkan, lalu di dalam masing-masing grup itu, SQL akan mengelompokkan lebih lanjut berdasarkan kolom berikutnya, dan seterusnya. Urutan ini dapat memengaruhi seberapa efisien basis data menangani kueri, bagaimana indeks digunakan, dan bagaimana pengelompokan sementara dibangun, terutama saat bekerja dengan dataset besar.
Sebagai contoh, jika Anda ingin mengelompokkan data berdasarkan wilayah dan produk, data terlebih dahulu dikelompokkan berdasarkan wilayah, lalu di dalam setiap wilayah, dikelompokkan berdasarkan produk. Namun jika Anda menukar urutannya menjadi (produk, wilayah), Anda mengubah hierarki pengelompokan, yang dapat menghasilkan hasil dan interpretasi yang berbeda dalam laporan Anda.
Sintaks dan Mekanisme
Mari kita telaah sintaks dan variasi klausa
GROUP BYdi SQL untuk memahaminya sepenuhnya.Sintaks untuk GROUP BY banyak kolom
Untuk menggunakan klausa
GROUP BYpada beberapa kolom, Anda harus mencantumkan setiap kolom dalam pernyataanSELECT, dipisahkan dengan koma. Basis data kemudian akan mengelompokkan baris berdasarkan kombinasi unik dari nilai kolom-kolom tersebut.Selalu pastikan bahwa semua kolom yang digunakan dalam pernyataan
SELECT, yang bukan bagian dari fungsi agregat, harus muncul dalam klausaGROUP BYuntuk menghindari kesalahan dan memastikan agregasi yang mudah dibaca.Misalkan Anda memiliki tabel
Salesdengan struktur berikut:Kueri di bawah ini mengelompokkan data berdasarkan kolom
regiondanproduct_category. Kemudian menghitungtotal_salesuntuk setiap kombinasi grup.Variasi sintaks lanjutan
Berikut adalah berbagai metode untuk menggunakan klausa
GROUP BYpada beberapa kolom di SQL:Referensi kolom bernomor
Alih-alih menggunakan nama kolom, SQL memungkinkan Anda menunjukkan posisi kolom dalam klausa
GROUP BY. Dari contoh sebelumnya,1merujuk ke kolomregiondan2ke kolomproduct_category. Metode ini didukung di MySQL dan PostgreSQL, tetapi tidak di SQL Server.Pengelompokan berbasis ekspresi
Anda juga dapat mengelompokkan berdasarkan ekspresi turunan atau nilai yang dihitung. Ini berguna untuk mengelompokkan berdasarkan data yang ditransformasi, seperti tahun dari tanggal atau substring. Misalnya, kueri di bawah ini mengelompokkan penjualan berdasarkan bulan yang diturunkan dari
sale_date.Memilih beberapa kolom tetapi mengelompokkan hanya satu
SQL memungkinkan Anda memilih beberapa kolom sambil mengelompokkan hanya satu, tetapi hanya jika kolom tambahan digunakan di dalam fungsi agregat. Pada contoh di bawah, hanya
regionyang ada dalam klausaGROUP BY, sementaraproduct_iddigunakan dalam fungsi agregat(COUNT(DISTINCT)), sehingga kueri valid.Saya merekomendasikan untuk mencoba proyek Analyzing and Formatting PostgreSQL Sales Data untuk memahami cara memanipulasi data di PostgreSQL. Selain itu, MySQL Basics Cheat Sheet akan menjadi panduan referensi yang berguna untuk kueri dasar tabel, memfilter data, dan mengagregasi data, terutama jika Anda lebih suka menggunakan MySQL.
Fungsi Agregat dengan GROUP BY
Keunggulan klausa GROUP BY di SQL adalah Anda dapat menggunakannya bersama fungsi agregat untuk mendapatkan ringkasan data yang dikelompokkan.
Fungsi agregat umum dalam pengelompokan multi-kolom
Fungsi agregat menawarkan wawasan multidimensi di berbagai kombinasi data saat mengelompokkan berdasarkan beberapa kolom. Berikut fungsi yang umum digunakan dengan klausa
GROUP BY:SUM(): Menjumlahkan semua nilai dalam kolom numerik untuk setiap grup.COUNT(): Menghitung jumlah baris atau nilai non-null di setiap grup.AVG(): Menghitung nilai rata-rata dalam setiap grup.MIN(): Menemukan nilai terkecil di setiap grup.MAX(): Menemukan nilai terbesar di setiap grup.Sebagai contoh, kueri di bawah ini menghitung total penjualan dan jumlah catatan penjualan untuk setiap kombinasi wilayah dan kategori produk
GROUP BY tanpa fungsi agregat
Pada contoh di atas, Anda telah melihat bahwa klausa
GROUP BYdigunakan bersama fungsi agregat. Namun, Anda dapat menggunakannya tanpa agregasi jika Anda ingin mengelompokkan baris berdasarkan kolom yang ditentukan, tetapi tanpa ringkasan.Misalnya, kueri di bawah ini menghasilkan pasangan unik dari wilayah dan kategori produk tanpa agregasi. Oleh karena itu, Anda dapat menggunakan metode ini untuk memeriksa konsistensi data.
Fitur Pengelompokan Lanjutan
Setelah kita melihat cara mengelompokkan berdasarkan beberapa kolom, mari lihat berbagai operasi pengelompokan lanjutan yang digunakan dengan klausa
GROUP BY.Operasi ROLLUP
Operasi ROLLUP dibangun di atas klausa
GROUP BYstandar dengan membuat tingkat ringkasan yang naik (roll up) sepanjang kolom yang ditentukan. Selain menampilkan grup terperinci, operasi ini juga menambahkan subtotal dan total keseluruhan dengan mengagregasi selangkah demi selangkah dari kanan ke kiri melalui kolom yang Anda kelompokkan.Sebagai contoh, dalam kueri di bawah ini, Anda mendapatkan
total_quantityuntuk setiap kombinasiregiondanproduct_category.Hasilnya mencakup subtotal untuk setiap wilayah (di manaproduct_categorymuncul sebagaiNULL) dan total keseluruhan yang menjumlahkan semuanya di seluruh wilayah dan kategori.Operasi CUBE
Operasi
CUBEmenghasilkan semua kombinasi yang mungkin dari kolom pengelompokan. Tidak seperti operasiROLLUPyang menghasilkan hierarki,CUBEmenghasilkan kubus data (data cube) agregasi yang lengkap.Operasi ini menyediakan tabulasi silang agregasi untuk setiap subset dari kolom yang ditentukan. Output dari operasi
CUBEmencakup ringkasan untuk setiap kolom, setiap kombinasi kolom, dan total keseluruhan.Misalnya, jika kita melakukan kueri pada tabel di atas dan mengelompokkan berdasarkan kolom (
region,product_category), operasiCUBEakan menghasilkan kombinasi berikut:(
region,product_category)(
region,NULL)(
NULL,product_category)(
NULL,NULL) yang merupakan total keseluruhanGROUPING SETS dan metadata
Jika Anda menginginkan kontrol yang lebih fleksibel atas bagaimana data Anda dikelompokkan, maka operasi
GROUPING SETSmemungkinkan Anda secara eksplisit mendefinisikan beberapa pengelompokan dalam satu kueri.Dalam hal ini, fungsi
GROUPING()menyediakan metadata tentang kolom mana yang diagregasi di setiap baris hasil, mengidentifikasi NULL yang merepresentasikan baris subtotal atau total, bukan data yang benar-benar hilang.Pertimbangan Performa dan Optimasi
Saat menulis kueri yang mengelompokkan berdasarkan beberapa kolom, penting untuk mengoptimalkannya demi efisiensi yang lebih baik dan kinerja basis data secara keseluruhan. Di bawah ini beberapa tips praktis yang saya gunakan untuk membantu optimasi kueri dan pengelolaan sumber daya
Teknik optimasi kueri
Agar kueri Anda berjalan lancar dan menggunakan sumber daya minimal:
Identifikasi hambatan performa: Kueri
GROUP BYbisa melambat saat berhadapan dengan dataset besar karena harus memindai, mengurutkan, dan mengagregasi banyak data. Untuk menghindari masalah ini, selalu lakukan filter lebih awal dengan klausaWHEREdan hindari mengambil data yang tidak Anda butuhkan.Gunakan pengindeksan secara efektif: Mengindeks kolom mempercepat performa
GROUP BY. Membuat indeks komposit pada kolom yang digunakan dalam klausaGROUP BYmembantu mesin basis data dengan cepat menemukan dan mengelompokkan baris tanpa pemindaian tabel penuh atau pengurutan yang mahal.Batasi kolom: Hanya sertakan kolom yang diperlukan untuk pengelompokan dan analisis Anda guna mengurangi kompleksitas dan meningkatkan performa.
Manfaatkan rencana kueri: Jika tersedia, periksa execution plan atau gunakan petunjuk kueri untuk membimbing optimizer basis data ke strategi terbaik.
Alokasi memori dan sumber daya komputasi
Memori berperan besar dalam seberapa baik kueri
GROUP BYberjalan. Mengurutkan dan mengelompokkan data sering memerlukan penyimpanan data sementara di memori. Jika memori tidak cukup, kinerja akan menurun secara signifikan.Untuk mengelola sumber daya dengan lebih baik:
Ingat juga bahwa ukuran data Anda sangat memengaruhi performa. Dataset besar dengan banyak kombinasi grup unik menggunakan lebih banyak memori dan daya pemrosesan. Teknik seperti mempartisi tabel besar, membuat tabel ringkasan terlebih dahulu, atau menggunakan materialized view membantu menjaga semuanya tetap terkendali.
Integrasi dengan Klausa SQL Lain
Klausa
GROUP BYbekerja baik dengan klausa SQL lain, membuat kueri Anda lebih kuat dan fleksibel. Berikutnya, Anda akan melihat contoh praktis cara menggabungkan GROUP BY dengan berbagai klausa SQL untuk meningkatkan analisis Anda.Interaksi dengan klausa WHERE dan HAVING
Klausa
WHEREmemfilter baris sebelum pengelompokan terjadi. Klausa ini membatasi dataset sehingga hanya baris yang diperlukan yang disertakan dalam proses agregasi. Misalnya, kueri di bawah ini mengelompokkan berdasarkanregion andproduct_category` tetapi hanya menyertakan catatan di mana region adalah ‘North.’Klausa
HAVING, di sisi lain, memfilter setelah agregasi. Klausa ini digunakan untuk membatasi grup mana yang muncul dalam hasil akhir berdasarkan nilai agregat. Kueri di bawah ini mengelompokkan berdasarkanregion andproduct_categorytetapi hanya menyertakan catatan di manatotal_quantity` lebih dari 5.Interaksi dengan operasi ORDER BY dan JOIN
Dalam urutan eksekusi SQL, tKlausa
ORDER BYberada setelah klausaGROUP BYdan digunakan untuk mengurutkan hasil yang telah dikelompokkan, sehingga lebih mudah dibaca atau diproses lebih lanjut. Dengan menggunakan indeks yang tepat dan memilih urutan kolom dengan cermat dalam klausaORDER BY, Anda dapat mempercepat kueri dengan mengurangi pekerjaan yang diperlukan untuk mengurutkan data.Sebagai contoh, kueri ini mengelompokkan data berdasarkan
regiondanproduct_category, lalu mengurutkan hasil sehingga grup dengantotal_quantitytertinggi muncul terlebih dahulu.Anda juga dapat menggabungkan operasi
JOINdengan klausaGROUP BYuntuk mengelompokkan data di beberapa tabel terkait. Anda harus berhati-hati saat menggunakan metode ini, karena dapat menambah kompleksitas akibat penggabungan data berukuran lebih besar.Saya menyarankan mengikuti kursus Joining Data in SQL untuk mempelajari berbagai jenis join dan cara menggunakannya dalam kueri bertingkat. Anda dapat mengunduh panduan SQL Joins Cheat Sheet kami sebagai referensi untuk mempelajari lebih lanjut tentang penggabungan data di SQL.
Interaksi dengan ekspresi CASE dalam GROUP BY
Ekspresi
CASEdalamGROUP BYmemungkinkan pengelompokan khusus dengan mentransformasikan nilai kolom secara dinamis di dalam proses pengelompokan.Kueri di bawah ini mengkategorikan produk berdasarkan rentang harga dan menghitung total kuantitas yang terjual per wilayah & kategori produk.
Pola Umum dan Praktik Terbaik
Seiring Anda terus menggunakan klausa
GROUP BYuntuk mengelompokkan beberapa kolom, Anda akan mengenali pola berulang untuk meningkatkan penggunaannya. Kita akan membahas kejadian umum ini beserta pertimbangan performanya.Pola analisis hierarkis dan temporal
Anda mungkin memperhatikan bahwa sebagian besar dataset memiliki hierarki yang melekat, seperti geografi (benua → negara → kota), kategori produk, atau struktur organisasi. Oleh karena itu, klausa
GROUP BYideal untuk meringkas data pada berbagai tingkat hierarki ini.Saat dihadapkan dengan data bertanggal dan bertimestamp, analisis temporal dapat membantu mengidentifikasi tren, musiman, dan perilaku berbasis waktu dengan mengelompokkan berdasarkan bagian tanggal seperti tahun, kuartal, bulan, atau hari.
Sebelumnya, kita membahas dua jenis pola pengelompokan. Pengelompokan hierarkis melibatkan kolom yang memiliki hubungan bertingkat alami, seperti mengelompokkan terlebih dahulu berdasarkan departemen, lalu di dalam setiap departemen berdasarkan tim. Sebaliknya, pengelompokan non-hierarkis mencampurkan dimensi yang tidak terkait, seperti jenis produk dan metode pembayaran, menampilkan kombinasi tanpa urutan atau struktur yang tersirat.
Pola pengelompokan berorientasi performa
Saat menggunakan
GROUP BYdengan beberapa kolom, Anda dapat meningkatkan performa dengan mengikuti tips praktis berikut:Batasi kolom pengelompokan: Selalu pastikan Anda mengelompokkan berdasarkan kolom yang diperlukan untuk analisis guna mengurangi beban komputasi grup.
Optimasi indeks: Pastikan kolom yang dikelompokkan diindeks untuk mempercepat performa kueri dengan membantu basis data menangani operasi pengurutan lebih efisien.
Filter sedini mungkin: Gunakan klausa
WHEREuntuk membatasi dataset Anda sebelum pengelompokan guna mengurangi jumlah data yang diproses.Gunakan rencana dan petunjuk kueri: Tinjau execution plan atau tambahkan petunjuk kueri jika didukung basis data Anda untuk membantu mengoptimalkan proses pengelompokan.
Manfaatkan fitur SQL lanjutan: Pertimbangkan menggunakan teknik seperti
ROLLUPatauGROUPING SETSuntuk membuat ringkasan lebih efisien dan menghindari menjalankan kueri berulang, terutama saat bekerja dengan data hierarkis atau multidimensi.Menghapus duplikasi dan pembersihan data
GROUP BYjuga bisa menjadi cara yang berguna untuk membersihkan data Anda dengan menghapus duplikasi berdasarkan bidang tertentu. Ini berguna ketika dataset Anda memiliki beberapa baris yang identik atau sebagian duplikat.Sebagai contoh, untuk menghapus catatan penjualan duplikat, Anda akan mengelompokkan berdasarkan
region,product_category, danproduct_name, lalu memilih harga tertinggi per grup untuk mempertahankan catatan yang paling relevan.Pemecahan Masalah dan Jebakan Umum
Saat bekerja dengan
GROUP BYpada beberapa kolom, ingatlah jebakan umum berikut:Spesifikasi kolom dan masalah tipe data
Salah satu kesalahan yang paling sering terjadi dalam kueri
GROUP BYterkait dengan spesifikasi kolom yang tidak benar. SQL mengharuskan when selecting multiple columns not wrapped dalam fungsi agregat, kolom-kolom tersebut harus disertakan dalam klausaGROUP BY. Jika tidak, akan terjadi kesalahan. Jadi, selalu sertakan kolom non-agregat dalam klausaGROUP BYjika disertakan dalam pernyataanSELECT.Anda juga mungkin mengalami kesalahan jika data yang Anda kelompokkan memiliki ketidakcocokan, terutama saat Anda mengelompokkan berdasarkan ekspresi. Misalkan Anda mengelompokkan data berdasarkan tanggal yang diformat. Dalam kasus tersebut, Anda akan mendapatkan kesalahan jika nilai tanggal memiliki format atau tingkat presisi yang berbeda, sehingga menghasilkan hasil yang tidak terduga atau tidak benar.
Degradasi performa dan penanganan nilai null
Menggunakan kueri
GROUP BYterkadang dapat memperlambat basis data Anda, terutama jika Anda mengelompokkan berdasarkan kolom dengan banyak nilai unik (kardinalitas tinggi) atau jika kolom-kolom tersebut tidak diindeks. Dataset besar juga memerlukan memori yang cukup untuk menangani langkah pengurutan dan pengelompokan, yang menambah beban.Untuk menghindari masalah ini, selalu indeks kolom dan lakukan filter menggunakan
WHEREuntuk membatasi data yang Anda kueri.Selain itu, penting untuk mengetahui bagaimana SQL menangani nilai NULL dalam pengelompokan: semua NULL dalam kolom pengelompokan diperlakukan sebagai satu grup yang sama, berapa pun jumlahnya. Namun, NULL tidak pernah dianggap sama dengan nilai aktual (non-NULL) mana pun, sehingga grup-grup tersebut tetap terpisah.
Kesimpulan
Menggunakan klausa
GROUP BYuntuk mengelompokkan beberapa kolom di SQL adalah teknik yang kuat yang memungkinkan analisis yang lebih dalam dan multidimensi dengan mengagregasi data di berbagai kombinasi bidang. Teknik ini memungkinkan analis melampaui ringkasan dasar dan mendapatkan lebih banyak wawasan tentang pola dan hubungan dalam data. Kapabilitas ini penting untuk pelaporan, pelacakan kinerja, dan pengambilan keputusan di lingkungan bisnis modern..Seiring data tumbuh dalam kompleksitas dan volume, SQL tetap menjadi alat fundamental dalam analitik. Untuk semakin meningkatkan keterampilan Anda, pertimbangkan untuk mengeksplorasi window function, common table expressions (CTE), dan materialized view, yang membuka pintu bagi transformasi data dan alur kerja pelaporan yang lebih canggih.
Saya merekomendasikan mengambil kursus PostgreSQL Summary Stats and Window Functions untuk mempelajari cara menulis kueri untuk analitik bisnis menggunakan Window function seperti seorang profesional. Saya juga menantang Anda untuk mencoba proyek: Analyzing Industry Carbon Emissions dan Analyzing Motorcycle Part Sales untuk menguji keterampilan SQL Anda dan menunjukkan penguasaan Anda dalam menggunakan SQL untuk memecahkan masalah bisnis.