Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi
Kunci pengelompokan gabungan dan pengelompokan berdasarkan nilai terhitung.
Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Melampaui Satu Kunci Pengelompokan
Laporan nyata jarang mengelompokkan berdasarkan satu kolom. Pewawancara meningkatkan pertanyaan dari “penjualan per wilayah” menjadi “penjualan per wilayah per bulan” untuk melihat apakah Anda memahami kunci pengelompokan gabungan.
Aturannya tetap sederhana: mencantumkan lebih banyak kolom dalam GROUP BY akan menghasilkan satu baris untuk setiap kombinasi berbeda dari kolom-kolom tersebut.
Makna Beberapa Kolom
Saat Anda menulis GROUP BY region, product, kunci grupnya adalah pasangan (region, product). Setiap pasangan unik menjadi satu baris keluaran.
- 5 wilayah dan 4 produk menghasilkan paling banyak 20 grup.
- Kombinasi yang tidak pernah muncul sama sekali tidak menghasilkan baris.
- Urutan kolom dalam GROUP BY tidak mengubah kumpulan hasil, tetapi terkadang hanya mengubah rencana eksekusi.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;Tetap Patuhi Aturan SELECT
Batasan intinya tidak berubah. Setiap kolom SELECT yang tidak diagregasi harus muncul dalam GROUP BY. Dengan kunci gabungan, Anda cukup mencantumkan semuanya.
Lupa mencantumkan satu kolom dalam grup berkunci banyak adalah kesalahan yang paling umum saat berada di bawah tekanan wawancara. Sesuaikan daftar GROUP BY tepat dengan kolom SELECT yang tidak diagregasi.
-- Both region and product appear in GROUP BY
SELECT region, product,
COUNT(*) AS orders,
AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;Mengelompokkan Berdasarkan Ekspresi
Anda dapat mengelompokkan berdasarkan nilai terhitung, bukan hanya kolom mentah. Permintaan yang sering muncul adalah mengelompokkan penjualan berdasarkan bulan, yang berarti mengelompokkan berdasarkan tanggal yang dipotong atau diekstrak.
Ekspresi dalam GROUP BY harus sama dengan ekspresi dalam SELECT. Mesin basis data mengelompokkan berdasarkan hasil perhitungan tersebut.
SELECT DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);Mengelompokkan dengan Bucket CASE
Pola yang sangat berguna: kelompokkan berdasarkan ekspresi CASE untuk membuat bucket khusus. Dengan cara ini, Anda dapat menghasilkan ringkasan “pesanan kecil / sedang / besar” tanpa tabel pencarian.
Pewawancara menyukai pola ini karena menguji logika CASE dan pengelompokan berdasarkan nilai turunan sekaligus.
SELECT CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END AS bucket,
COUNT(*) AS orders
FROM sales
GROUP BY CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END;Mengelompokkan Berdasarkan Posisi Kolom
Banyak dialek mengizinkan pengelompokan berdasarkan posisi ordinal: GROUP BY 1, 2 berarti kolom SELECT pertama dan kedua. Cara ini ringkas, tetapi rapuh.
Pewawancara mungkin menerimanya, tetapi perhatikan risikonya: mengubah urutan daftar SELECT secara diam-diam mengubah pengelompokan. Dalam kode produksi, lebih baik gunakan ekspresi yang ditulis secara eksplisit.
-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
region, SUM(amount)
FROM sales
GROUP BY 1, 2;NULL Membentuk Grupnya Sendiri
Berikut jebakan penanganan NULL dalam pengelompokan: ketika kolom pengelompokan berisi NULL, semua baris NULL digabungkan menjadi satu grup.
Hal ini berbeda dari perbandingan kesetaraan, karena NULL tidak pernah sama dengan NULL. Untuk keperluan pengelompokan, NULL diperlakukan sebagai “sama” dan membentuk satu bucket. Pewawancara menyukai kontradiksi yang tampak ini.
-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;GROUPING SETS untuk Beberapa Tingkat
Untuk menghasilkan beberapa tingkat perincian pengelompokan dalam satu kueri, gunakan GROUPING SETS. Kueri ini menghitung setiap kumpulan kunci yang dicantumkan dan menggabungkan hasilnya.
Ini merupakan tanda kemampuan tingkat menengah hingga senior: alih-alih menggunakan tiga kueri terpisah ditambah UNION, satu pernyataan mengembalikan total per wilayah, per produk, dan total keseluruhan secara bersamaan.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());ROLLUP dan CUBE
ROLLUP dan CUBE adalah bentuk singkat untuk kumpulan pengelompokan yang umum. ROLLUP(region, product) menghasilkan wilayah+produk, subtotal wilayah, dan total keseluruhan, sehingga ideal untuk laporan hierarkis.
CUBE menghasilkan setiap kombinasi dari kolom yang dicantumkan. Mengetahui hal ini membedakan kandidat yang pernah membuat kueri pelaporan nyata.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);Contoh: Laporan Wilayah Bulanan
Gabungkan berbagai gagasan: total dan rata-rata penjualan per wilayah per bulan, hanya untuk pesanan yang telah selesai, lalu urutkan agar mudah dibaca.
WHERE mempersempit baris terlebih dahulu, kunci gabungan mengelompokkan berdasarkan wilayah dan ekspresi bulan, lalu ORDER BY mengatur keluaran. Ini merupakan jawaban lengkap yang umum dalam wawancara analis.
SELECT region,
DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS total,
AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;Cara Menjelaskan Penalaran Anda
Untuk pertanyaan apa pun tentang pengelompokan gabungan, nyatakan kuncinya secara eksplisit: “Saya mengelompokkan berdasarkan kombinasi X dan Y, sehingga saya mendapatkan satu baris untuk setiap pasangan (X, Y) yang berbeda.”
Kemudian pastikan setiap kolom SELECT yang tidak diagregasi terdapat dalam kunci tersebut, dan sebutkan bahwa NULL digabungkan menjadi satu grup. Penjelasan yang sistematis seperti ini dihargai dalam wawancara tingkat menengah.
Pemeriksaan Singkat
Bernalarlah tentang kunci pengelompokan gabungan.
Rangkuman
Kunci gabungan: mencantumkan beberapa kolom menghasilkan satu baris untuk setiap kombinasi berbeda; setiap kolom SELECT yang tidak diagregasi harus terdapat dalam kunci.
- Anda dapat mengelompokkan berdasarkan ekspresi, bucket CASE, atau posisi ordinal (posisi bersifat rapuh).
- NULL dalam kolom pengelompokan digabungkan menjadi satu grup.
GROUPING SETS,ROLLUP, danCUBEmenghasilkan beberapa tingkat pengelompokan dalam satu kueri.- Dorong filter baris ke WHERE sebelum pengelompokan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi” gratis?
Ya — teks lengkap “Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi”?
Kunci pengelompokan gabungan dan pengelompokan berdasarkan nilai terhitung. Kamu berlatih Coding Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Coding Interview Prep?
Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Coding Interview Prep ini?
Ya. Setiap pelajaran Coding Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Aturan GROUP BY untuk Kolom SELECT
- HAVING vs WHERE
- Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi
- Menghitung dan Memfilter Grup