0Pricing
Coding Interview Prep · Pelajaran

DISTINCT vs GROUP BY untuk Keunikan

Kapan DISTINCT merupakan jawaban yang tepat dan kapan pewawancara mengharapkan GROUP BY.

DISTINCT vs GROUP BY untuk Keunikan 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.

Fungsi DISTINCT

DISTINCT menghapus baris duplikat. Hal penting yang sering diperiksa pewawancara: DISTINCT bekerja pada seluruh baris yang dipilih, bukan pada satu kolom—jadi SELECT DISTINCT a, b menghapus duplikat berdasarkan pasangan (a, b).

SELECT DISTINCT department
FROM employees;

DISTINCT Mencakup Semua Kolom yang Dipilih

Jika terdapat beberapa kolom, DISTINCT mempertahankan setiap kombinasi unik—satu baris untuk setiap pasangan (department, job_title) yang berbeda. Tidak ada cara standar untuk menghapus duplikat hanya pada satu kolom.

SELECT DISTINCT department, job_title
FROM employees;

Fungsi GROUP BY

GROUP BY menggabungkan baris yang memiliki kunci yang sama menjadi satu baris per kelompok. Jika digunakan sendiri, pengelompokan berdasarkan suatu kolom menghasilkan hal yang sama seperti DISTINCT pada kolom tersebut.

SELECT department
FROM employees
GROUP BY department;
-- equivalent to:
SELECT DISTINCT department
FROM employees;

Perbedaan Sebenarnya: Agregasi

Jadi, kapan keduanya berbeda? Ketika Anda memerlukan agregat. GROUP BY dapat menghitung COUNT, SUM, atau AVG untuk setiap kelompok, sedangkan DISTINCT tidak. Memerlukan baris unik? Gunakan DISTINCT. Memerlukan metrik per kelompok? Gunakan GROUP BY.

SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;

DISTINCT Tidak Dapat Menghitung per Kelompok

Anda tidak dapat menambahkan penghitungan ke DISTINCT. Untuk menjawab pertanyaan «berapa banyak karyawan per departemen», alat yang tepat selalu GROUP BY dengan COUNT(*)—bukan SELECT DISTINCT.

-- WRONG intent: this errors or returns one total row
-- SELECT DISTINCT department, COUNT(*) FROM employees;

-- RIGHT:
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;

COUNT(DISTINCT) Menggabungkan Kedua Gagasan

Kombinasi yang sering digunakan: COUNT(DISTINCT col) menghitung nilai unik dalam setiap kelompok. Di sini, DISTINCT berada di dalam agregat untuk menjawab pertanyaan «ada berapa jabatan berbeda di setiap departemen?»

SELECT department,
       COUNT(DISTINCT job_title) AS distinct_titles
FROM employees
GROUP BY department;

Menghitung Nilai Unik secara Keseluruhan

Tanpa GROUP BY, COUNT(DISTINCT col) menghitung nilai unik di seluruh tabel—jawaban yang tepat untuk pertanyaan «ada berapa departemen berbeda yang kita miliki?»

SELECT COUNT(DISTINCT department) AS n_departments
FROM employees;

-- equivalently, count the deduped subquery
SELECT COUNT(*)
FROM (SELECT DISTINCT department FROM employees) d;

Kinerja Sering Kali Sama Saja

Mana yang lebih cepat, DISTINCT atau GROUP BY? Untuk penghapusan duplikat biasa, biasanya setara—pengoptimal merencanakan keduanya dengan cara yang sama. Pilih berdasarkan tujuan: DISTINCT untuk baris unik, GROUP BY saat melakukan agregasi.

DISTINCT dan NULL

Bagaimana DISTINCT memperlakukan NULL? Semua NULL dianggap sama, sehingga banyak baris NULL digabungkan menjadi satu. GROUP BY juga melakukan hal yang sama—NULL membentuk satu kelompok.

-- If manager_id has several NULLs, this returns one NULL row
SELECT DISTINCT manager_id
FROM employees;

DISTINCT ON Postgres (Tambahan)

Tambahan: Postgres memiliki DISTINCT ON (expr) yang tidak standar dan mempertahankan baris pertama untuk setiap kunci berdasarkan ORDER BY. Kode portabel menggunakan ROW_NUMBER() sebagai gantinya.

-- Postgres only: latest order per customer
SELECT DISTINCT ON (customer_id) customer_id, order_id, order_date
FROM orders
ORDER BY customer_id, order_date DESC;

DISTINCT Berlaku untuk Seluruh SELECT, Bukan Satu Kolom

Satu jebakan lagi: DISTINCT bekerja pada seluruh baris, jadi SELECT DISTINCT customer_id, order_date tidak akan menghasilkan satu baris per pelanggan. Untuk itu, gunakan GROUP BY dengan MAX atau fungsi jendela.

-- Does NOT give one row per customer
SELECT DISTINCT customer_id, order_date FROM orders;

-- One row per customer: latest order date
SELECT customer_id, MAX(order_date) AS last_order
FROM orders
GROUP BY customer_id;

Uji Cepat

Pilih alat yang tepat.

Rangkuman

Rangkuman: DISTINCT menghapus duplikat dari seluruh baris; GROUP BY menggabungkan baris berdasarkan kunci dan memungkinkan agregat. COUNT(DISTINCT col) menghitung nilai unik, keduanya memperlakukan NULL sebagai satu nilai, dan kinerjanya biasanya sama saja.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “DISTINCT vs GROUP BY untuk Keunikan” gratis?

Ya — teks lengkap “DISTINCT vs GROUP BY untuk Keunikan” 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 “DISTINCT vs GROUP BY untuk Keunikan”?

Kapan DISTINCT merupakan jawaban yang tepat dan kapan pewawancara mengharapkan GROUP BY. 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 “DISTINCT vs GROUP BY untuk Keunikan” 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. Memproyeksikan Kolom dan Jebakan Alias
  2. Kolom Terhitung dan Prioritas Ekspresi
  3. DISTINCT vs GROUP BY untuk Keunikan
  4. Ekspresi CASE dalam SELECT
← Kembali ke Coding Interview Prep