- 1 1. Pengenalan
- 2 2. Dasar-dasar Menghitung Data di MySQL (COUNT)
- 3 3. Mengambil Data Tanpa Duplikat (DISTINCT)
- 4 4. Cara Menggunakan COUNT(DISTINCT column_name)
- 5 5. Menggunakan COUNT(DISTINCT) dengan Beberapa Kolom
- 6 6. Penyetelan Performa untuk COUNT(DISTINCT)
- 7 7. Kesalahan Umum dan Solusi untuk COUNT(DISTINCT)
- 8 8. Pertanyaan yang Sering Diajukan (FAQ)
- 9 9. Kesimpulan
1. Pengenalan
Saat mengelola basis data, Anda mungkin menghadapi situasi seperti, “Berapa banyak negara berbeda yang telah terdaftar?” atau “Berapa banyak alamat email unik yang ada?”
Dalam kasus seperti itu, Anda dapat menggunakan MySQL’s COUNT(DISTINCT column_name) untuk mengambil jumlah catatan sambil menghilangkan duplikat.
Artikel ini menjelaskan topik-topik berikut secara detail:
- Dasar-dasar
COUNT()danDISTINCT - Penggunaan yang benar dari
COUNT(DISTINCT column_name) - Cara menghitung nilai unik di seluruh beberapa kolom
- Cara meningkatkan performa
COUNT(DISTINCT)
Panduan ini mudah dipahami bahkan oleh pemula, karena kami menjelaskan semuanya dengan contoh praktis dan kueri SQL. Pastikan untuk membaca hingga akhir.
2. Dasar-dasar Menghitung Data di MySQL (COUNT)
Saat menganalisis data di basis data, fungsi paling mendasar adalah COUNT().
Mari kita pahami terlebih dahulu bagaimana COUNT() bekerja.
2.1 Perbedaan Antara COUNT(*) dan COUNT(column_name)
Fungsi COUNT() di MySQL dapat digunakan dengan dua cara berikut:
| COUNT Function | Description |
|---|---|
COUNT(*) | Counts all records in the table (including NULL values) |
COUNT(column_name) | Counts non-NULL values in a specific column |
2.2 Contoh Dasar COUNT()
Di sini, kami akan menggunakan tabel users berikut sebagai contoh:
| id | name | country | |
|---|---|---|---|
| 1 | Taro | taro@example.com | Japan |
| 2 | Hanako | hanako@example.com | Japan |
| 3 | John | NULL | United States |
| 4 | Tanaka | tanaka@example.com | Japan |
① Mengambil Total Jumlah Catatan di Tabel
SELECT COUNT(*) FROM users;
→ Hasil: 4 (Total jumlah catatan)
② Mengambil Jumlah Nilai Non-NULL di Kolom Tertentu
SELECT COUNT(email) FROM users;
→ Hasil: 3 (Jumlah nilai non-NULL email)
💡 Poin Kunci:
COUNT(*)mengambil total jumlah catatan termasuk nilai NULL .COUNT(email)mengecualikan nilai NULL saat menghitung.

3. Mengambil Data Tanpa Duplikat (DISTINCT)
Saat mengagregasi data, ada banyak kasus di mana Anda ingin mengambil hanya nilai unik.
Dalam situasi seperti itu, DISTINCT sangat berguna.
3.1 Dasar-dasar DISTINCT
DISTINCT digunakan untuk menghilangkan data duplikat dari kolom yang ditentukan dan mengembalikan hasil unik.
Sintaks Dasar
SELECT DISTINCT column_name FROM table_name;
3.2 Contoh Penggunaan DISTINCT
Dengan menjalankan kueri SQL berikut, Anda dapat mengambil daftar nama negara unik yang terdaftar oleh pengguna.
SELECT DISTINCT country FROM users;
→ Hasil:
| country |
|---|
| Japan |
| United States |
3.3 Perbedaan Antara DISTINCT dan GROUP BY
| Feature | DISTINCT | GROUP BY |
|---|---|---|
| Purpose | Retrieve unique values | Perform aggregation by group |
| Usage | SELECT DISTINCT column_name | SELECT column_name, COUNT(*) GROUP BY column_name |
| Example | Retrieve unique countries | Count users per country |
💡 Poin Kunci:
DISTINCThanya menghapus data duplikat .GROUP BYmengelompokkan data dan digunakan bersama dengan fungsi agregat .
4. Cara Menggunakan COUNT(DISTINCT column_name)
Dengan menggunakan COUNT(DISTINCT column_name), Anda dapat mengambil jumlah nilai unik.
4.1 Dasar-dasar COUNT(DISTINCT)
Sintaks Dasar
SELECT COUNT(DISTINCT column_name) FROM table_name;
4.2 Contoh COUNT(DISTINCT)
SELECT COUNT(DISTINCT country) FROM users;
→ Hasil: 2 (Dua jenis: “Japan” dan “United States”)
4.3 Menggunakan COUNT(DISTINCT) dengan Kondisi
SELECT COUNT(DISTINCT email) FROM users WHERE country = 'Japan';
→ Hasil: 2 (Jumlah nilai email unik yang terdaftar di Japan)
💡 Poin Kunci:
COUNT(DISTINCT column_name)mengecualikan nilai NULL dan hanya menghitung data unik.- Dengan menggunakan klausa
WHERE, Anda dapat menghitung catatan yang memenuhi kondisi tertentu .
5. Menggunakan COUNT(DISTINCT) dengan Beberapa Kolom
Di MySQL, COUNT(DISTINCT column1, column2) tidak dapat digunakan secara langsung. Sebaliknya, solusi umum adalah menggabungkan kolom menggunakan CONCAT() dan memperlakukannya sebagai satu nilai.
5.1 Mengapa COUNT(DISTINCT column1, column2) Tidak Dapat Digunakan
Di MySQL, Anda tidak dapat menerapkan COUNT(DISTINCT) secara langsung ke beberapa kolom seperti ini: COUNT(DISTINCT column1, column2).
Ini disebabkan oleh keterbatasan di MySQL.
5.2 Cara Menghitung Kombinasi Unik di Seluruh Beberapa Kolom
Untuk menghitung kombinasi unik dari beberapa kolom, pendekatan umum adalah menggabungkan kolom menggunakan CONCAT() dan kemudian menerapkan COUNT(DISTINCT) pada hasilnya.
Contoh: Hitung Kombinasi Unik Negara dan Kota
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Poin Kunci:
- Menggunakan
CONCAT(column1, '-', column2)memungkinkan Anda untuk menggabungkan beberapa kolom menjadi satu nilai unik . COUNT(DISTINCT CONCAT(...))memungkinkan Anda untuk mengambil jumlah kombinasi unik di seluruh beberapa kolom .
6. Penyetelan Performa untuk COUNT(DISTINCT)
COUNT(DISTINCT) dapat memengaruhi performa, sehingga optimalisasi mungkin diperlukan.
Saat bekerja dengan dataset besar, disarankan untuk mempertimbangkan menggunakan indeks atau pendekatan alternatif.
6.1 Mengapa COUNT(DISTINCT) Bisa Lambat
- MySQL sering memindai semua catatan untuk menerapkan
DISTINCT. - Jika indeks tidak dikonfigurasi dengan benar, eksekusi query menjadi lebih lambat .
- Volume data duplikat yang tinggi meningkatkan beban komputasi .
6.2 Optimalisasi Indeks untuk Mempercepat COUNT(DISTINCT)
Saat menangani jumlah data besar, Anda dapat meningkatkan performa query dengan menambahkan indeks ke kolom target.
Cara Menambahkan Indeks
ALTER TABLE users ADD INDEX (country);
Periksa Rencana Eksekusi Query Menggunakan Indeks
EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
💡 Poin Kunci:
- Menggunakan
EXPLAINmemungkinkan Anda untuk memeriksa bagaimana MySQL memproses query. - Menerapkan indeks dapat membantu menghindari pemindaian tabel penuh dan meningkatkan performa pencarian .
6.3 Metode Alternatif: GROUP BY + COUNT
Tergantung pada persyaratan agregasi, menggunakan GROUP BY mungkin memberikan performa yang lebih baik.
Contoh: Hitung Data Unik Menggunakan GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Poin Kunci:
GROUP BYmungkin menawarkan performa yang lebih baik dibandingkanCOUNT(DISTINCT)dalam beberapa kasus.- Ini sangat berguna ketika Anda perlu mengelompokkan dan mengagregasi data secara bersamaan .
7. Kesalahan Umum dan Solusi untuk COUNT(DISTINCT)
Saat menggunakan COUNT(DISTINCT), Anda mungkin mengalami beberapa kesalahan umum.
Di sini, kami memperkenalkan isu-isu tipikal dan solusinya.
7.1 Kesalahan 1: COUNT(DISTINCT column1, column2) Tidak Dapat Digunakan
Penyebab Kesalahan
Di MySQL, COUNT(DISTINCT column1, column2) tidak didukung saat menargetkan beberapa kolom.
Menggunakan sintaks ini secara langsung akan menghasilkan kesalahan.
Solusi: Gunakan CONCAT()
Anda dapat menghindari kesalahan ini dengan menggabungkan beberapa kolom dan menerapkan COUNT(DISTINCT) pada hasilnya.
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Poin Kunci:
- Menggunakan
CONCAT(column1, '-', column2)memungkinkan Anda untuk membuat nilai unik dari beberapa kolom . COUNT(DISTINCT CONCAT(...))memungkinkan Anda untuk mengambil nilai unik untuk setiap kombinasi .
7.2 Kesalahan 2: Hasil Tak Terduga Saat Nilai NULL Disertakan
Penyebab Kesalahan
COUNT(DISTINCT column_name)mengabaikan nilai NULL , yang mungkin menyebabkan hasil tak terduga jika kolom berisi NULL.
Solusi: Gunakan IFNULL()
Anda dapat mengganti NULL dengan nilai default lain (misalnya, '' atau 'unknown') untuk memastikan penghitungan yang tepat.
SELECT COUNT(DISTINCT IFNULL(email, 'unknown')) FROM users;
💡 Poin Kunci:
- Dengan menggunakan
IFNULL(column_name, 'default_value'), Anda dapat menangani nilai NULL dengan tepat .
7.3 Kesalahan 3: COUNT(DISTINCT) Lambat
Penyebab Kesalahan
COUNT(DISTINCT)memindai semua data , yang dapat menghasilkan performa lambat dengan dataset besar.
Solusi: Gunakan Indeks
ALTER TABLE users ADD INDEX (country);
💡 Poin Kunci:
- Menambahkan indeks dapat meningkatkan performa query .
- Gunakan
EXPLAINuntuk memeriksa status optimalisasi query.EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
Dengan menerapkan langkah-langkah ini, Anda dapat meningkatkan kepraktisan COUNT(DISTINCT) dan menghindari masalah kinerja.
8. Pertanyaan yang Sering Diajukan (FAQ)
Berikut beberapa pertanyaan yang sering diajukan tentang COUNT(DISTINCT).
8.1 Apa Perbedaan Antara COUNT(*) dan COUNT(DISTINCT column_name)?
Perbedaan Utama
| Function | Description |
|---|---|
COUNT(*) | Counts all records (including NULL values) |
COUNT(DISTINCT column_name) | Counts unique values (excluding NULL values) |
Contoh Penggunaan
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT email) FROM users;
💡 Poin Penting:
COUNT(*)menghitung semua record.COUNT(DISTINCT column_name)mengambil jumlah nilai unik (tidak termasuk NULL).
8.2 Apa Perbedaan Antara DISTINCT dan GROUP BY?
| Feature | DISTINCT | GROUP BY |
|---|---|---|
| Purpose | Retrieve unique values | Perform aggregation by group |
| Usage | SELECT DISTINCT column_name | SELECT column_name, COUNT(*) GROUP BY column_name |
| Example | Retrieve unique countries | Count users per country |
Contoh Penggunaan
-- Using DISTINCT
SELECT DISTINCT country FROM users;
-- Using GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Poin Penting:
DISTINCTsecara sederhana menghapus data duplikat.GROUP BYmengelompokkan data dan dapat digabungkan dengan fungsi agregat.
8.3 Apakah COUNT(DISTINCT) Lambat?
Masalah
COUNT(DISTINCT)memindai semua data, sehingga kinerja dapat menurun pada dataset besar.
Solusi: Gunakan Indeks
ALTER TABLE users ADD INDEX (country);
Pendekatan Alternatif: Gunakan GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Poin Penting:
- Menerapkan indeks dapat meningkatkan kinerja pencarian.
- Menggunakan
GROUP BYdapat menghasilkan hasil yang lebih cepat dibandingkanCOUNT(DISTINCT)dalam beberapa kasus.
8.4 Bagaimana Saya Dapat Menggunakan COUNT(DISTINCT column1, column2)?
Masalah
- Di MySQL,
COUNT(DISTINCT column1, column2)tidak didukung.
Solusi: Gunakan CONCAT()
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Poin Penting:
- Menggunakan
CONCAT(column1, '-', column2)memungkinkan Anda membuat nilai unik di beberapa kolom. COUNT(DISTINCT CONCAT(...))memungkinkan Anda mengambil kombinasi unik.
Dengan merujuk pada pertanyaan-pertanyaan ini, Anda dapat menggunakan COUNT(DISTINCT) secara lebih efisien.
9. Kesimpulan
Dalam artikel ini, kami menjelaskan secara detail cara menggunakan fungsi COUNT(DISTINCT) MySQL.
Mari kita tinjau poin-poin penting.
9.1 Apa yang Anda Pelajari dalam Artikel Ini
✅ Cara menghitung record di MySQL
COUNT(*)mengambil total jumlah recordCOUNT(column_name)menghitung nilai kecuali NULLCOUNT(DISTINCT column_name)mengambil jumlah nilai unik
✅ Perbedaan antara DISTINCT dan COUNT(DISTINCT)
DISTINCTmengambil data dengan duplikat dihapusCOUNT(DISTINCT column_name)menghitung jumlah nilai unik
✅ Cara menggunakan COUNT(DISTINCT) dengan beberapa kolom
- Karena MySQL tidak mendukung
COUNT(DISTINCT column1, column2)secara langsung, gunakanCONCAT()sebagai gantinya
✅ Teknik optimasi kinerja
- Terapkan indeks untuk meningkatkan kinerja pencarian
- Gunakan
GROUP BY + COUNTuntuk kueri yang lebih cepat bila sesuai
9.2 Apa yang Bisa Anda Lakukan dengan Pengetahuan Ini
Dengan menerapkan pengetahuan ini, Anda dapat melakukan jenis agregasi data berikut:
🔹 Menghitung pengguna unik
🔹 Mengambil jumlah record berdasarkan kondisi tertentu
🔹 Menghitung data unik di beberapa kolom
🔹 Mengoptimalkan kueri untuk dataset besar
Saat melakukan agregasi data dan optimasi di MySQL, pastikan untuk menggunakan panduan ini sebagai referensi!


