0Pricing
Coding Interview Prep · Pelajaran

Menghitung dan Memfilter Grup

Temukan grup yang memenuhi ambang batas, seperti pertanyaan standar “pelanggan dengan lebih dari N pesanan”.

Menghitung dan Memfilter Grup adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 4 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.

Pertanyaan Pengelompokan yang Paling Umum

“Temukan pelanggan dengan lebih dari N pesanan” adalah soal wawancara GROUP BY yang klasik. Variasinya sering muncul: produk yang terjual lebih dari X kali, departemen dengan setidaknya Y karyawan, atau hari dengan lebih dari Z login.

Semuanya menggunakan pola yang sama: kelompokkan, hitung, lalu filter grup dengan HAVING.

Langkah Pertama: Hitung per Grup

Mulailah dengan menghitung baris dalam setiap grup. Kelompokkan berdasarkan kunci yang mendefinisikan “pelanggan” atau “produk”, lalu terapkan COUNT(*).

Hasilnya adalah satu baris untuk setiap grup beserta ukurannya. Anda belum memfilter apa pun; Anda baru mengukur setiap grup.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;

Langkah Kedua: Memfilter dengan HAVING

Sekarang pertahankan hanya grup yang memenuhi ambang batas. Kondisinya bergantung pada agregat, sehingga harus ditempatkan di HAVING, bukan WHERE.

Bacalah sebagai berikut: “kelompokkan pesanan berdasarkan pelanggan, lalu pertahankan pelanggan yang jumlah pesanannya lebih dari lima.” Ini adalah jawaban lengkap untuk pertanyaan klasik tersebut.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Menghitung Nilai Berbeda vs Semua Nilai

Perhatikan kata-katanya. “Pelanggan yang memesan lebih dari 3 produk yang berbeda” memerlukan COUNT(DISTINCT product_id), bukan COUNT(*).

  • COUNT(*) menghitung baris dalam grup.
  • COUNT(DISTINCT col) menghitung nilai unik yang bukan NULL.

Pewawancara menyisipkan kata “berbeda” atau “unik” dalam pertanyaan untuk menguji apakah Anda menggunakan DISTINCT.

SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;

Memfilter SUM, Bukan COUNT

Struktur yang sama juga berlaku untuk penjumlahan. “Pelanggan yang total belanjanya lebih dari 1000” mengelompokkan berdasarkan pelanggan dan memfilter berdasarkan SUM(amount).

Agregat apa pun dapat menjadi dasar kondisi HAVING: COUNT, SUM, AVG, MAX, MIN. Mengenali ukuran yang diminta dalam pertanyaan akan memberi tahu Anda agregat mana yang harus digunakan sebagai filter.

SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Beberapa Kondisi Grup

HAVING dapat menggabungkan kondisi dengan AND/OR, termasuk agregat yang berbeda. “Pelanggan dengan lebih dari 5 pesanan DAN rata-rata pesanan di atas 100” dapat ditulis dalam satu klausa HAVING.

Setiap kondisi merujuk pada agregatnya sendiri; semuanya dievaluasi setelah pengelompokan. Ini menunjukkan bahwa Anda dapat menyatakan aturan bisnis majemuk dengan rapi.

SELECT customer_id,
       COUNT(*) AS orders,
       AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;

Menggabungkan WHERE dan HAVING

Sering kali Anda harus memfilter baris sebelum menghitung. “Di antara pesanan dari tahun ini, temukan pelanggan dengan lebih dari 5 pesanan” menggunakan WHERE untuk tanggal dan HAVING untuk jumlah pesanan.

WHERE terlebih dahulu mengurangi jumlah baris, lalu pengelompokan dan ambang HAVING diterapkan. Menggunakan kedua klausa dengan tepat dalam satu kueri merupakan tanda kemampuan tingkat menengah.

SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;

Menemukan Duplikat

Kasus yang serupa adalah “temukan email duplikat.” Kelompokkan berdasarkan kolom yang seharusnya unik, lalu pertahankan grup dengan jumlah lebih dari satu.

Pola tunggal ini dapat mendeteksi kunci duplikat, transaksi berulang, atau nilai apa pun yang muncul lebih banyak daripada seharusnya. Pewawancara menanyakannya untuk menguji apakah Anda memahami pengelompokan sebagai alat deduplikasi.

SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Kelompok dengan Jumlah yang Tepat

Ambang batas tidak selalu berarti 'lebih besar dari'. 'Pelanggan dengan tepat satu pesanan' menggunakan HAVING COUNT(*) = 1; 'setidaknya 3' menggunakan >= 3.

Perhatikan kata penentu batas dalam pertanyaan: 'lebih dari', 'setidaknya', 'tepat', 'kurang dari'. Masing-masing dipetakan ke operator perbandingan yang berbeda, dan pewawancara menguji ketepatan tersebut.

-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;

Mengembalikan Hanya Kunci

Kadang-kadang pertanyaan hanya meminta pengenal yang memenuhi syarat, bukan jumlahnya, sering kali untuk digunakan dalam kueri lain. Anda tetap mengelompokkan dan menyaring, tetapi SELECT hanya kuncinya.

Anda kemudian dapat membungkusnya dalam subkueri IN atau gabungan untuk mengambil rekaman lengkap pelanggan tersebut. Memahami komposisi ini menunjukkan keahlian tingkat lanjut.

SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Panduan Wawancara

Untuk pertanyaan apa pun tentang 'kelompok yang memenuhi ambang batas', jelaskan dengan lantang empat langkah: (1) identifikasi kunci pengelompokan, (2) pilih ukuran agregat, (3) tentukan operator perbandingan berdasarkan kata-kata yang digunakan, (4) tempatkan penyaring baris di WHERE dan penyaring agregat di HAVING.

Templat ini menyelesaikan seluruh kelompok masalah penghitungan dan penyaringan.

Uji Singkat

Pilih kueri yang benar untuk pertanyaan tersebut.

Rangkuman

Pola: kelompokkan berdasarkan kunci, lakukan agregasi, lalu saring kelompok dengan HAVING. Pola ini menyelesaikan kasus 'lebih dari N pesanan', pelanggan dengan pengeluaran terbesar, duplikat, dan pelanggan satu kali.

  • Gunakan COUNT(*) untuk baris, dan COUNT(DISTINCT col) untuk nilai unik.
  • Sesuaikan operator perbandingan dengan kata-kata dalam pertanyaan.
  • Penyaring baris ditempatkan di WHERE, sedangkan penyaring agregat ditempatkan di HAVING.
  • Gunakan SELECT hanya untuk kunci agar dapat digunakan dalam subkueri IN atau gabungan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menghitung dan Memfilter Grup” gratis?

Ya — teks lengkap “Menghitung dan Memfilter Grup” 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 “Menghitung dan Memfilter Grup”?

Temukan grup yang memenuhi ambang batas, seperti pertanyaan standar “pelanggan dengan lebih dari N pesanan”. 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 4 dari 4.

Berapa lama pelajaran “Menghitung dan Memfilter Grup” 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

  1. Aturan GROUP BY untuk Kolom SELECT
  2. HAVING vs WHERE
  3. Mengelompokkan Berdasarkan Beberapa Kolom dan Ekspresi
  4. Menghitung dan Memfilter Grup
← Kembali ke Coding Interview Prep