COALESCE SQL: Ganti NULL dengan Nilai Default
Blog/Tutorial SQL/COALESCE SQL: Ganti NULL dengan Nilai Default

COALESCE SQL: Ganti NULL dengan Nilai Default

BimaBima
·4 Februari 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

COALESCE adalah fungsi SQL yang ngecek beberapa nilai secara berurutan dan ngembaliin yang pertama bukan NULL. Sintaksnya COALESCE(nilai1, nilai2, ..., default). Fungsi ini standar SQL, jadi jalan di PostgreSQL, MySQL, SQL Server, dan Oracle tanpa perlu diubah.

COALESCE adalah fungsi SQL yang ngecek beberapa nilai berurutan dan ngembaliin yang pertama bukan NULL.

Kedengeran sederhana. Tapi ini fungsi yang bikin laporan kamu berhenti nampilin kolom kosong yang bikin bos nanya, dan bikin SUM kamu berhenti ngasih angka yang nggak masuk akal.

Satu fungsi, dan jalan di PostgreSQL, MySQL, SQL Server, maupun Oracle tanpa diubah sedikit pun.

Apa itu COALESCE di SQL?

COALESCE nerima daftar nilai, ngecek dari kiri ke kanan, dan ngembaliin nilai pertama yang bukan NULL. Kalau semuanya NULL, hasilnya NULL.

COALESCE(nilai1, nilai2, nilai3, ..., default)

Contoh paling pendek:

SELECT COALESCE(NULL, NULL, 'Jakarta', 'Bandung');
-- Hasil: Jakarta

Dua NULL pertama dilewatin. Begitu ketemu 'Jakarta', COALESCE berhenti dan ngeluarin itu. 'Bandung' nggak pernah dilihat.

Contoh di artikel ini pakai tabel pelanggan dari dataset Toko Berkah:

CREATE TABLE pelanggan (
    id            INT PRIMARY KEY,
    nama          VARCHAR(50),
    email         VARCHAR(80),
    telepon       VARCHAR(20),
    whatsapp      VARCHAR(20),
    kota          VARCHAR(30),
    total_belanja INT
);

INSERT INTO pelanggan VALUES
(1, 'Siti Rahayu',    'siti@mail.com', '081234567890', NULL,           'Jakarta',  4500000),
(2, 'Budi Santoso',   NULL,            '081298765432', '081298765432', 'Bandung',  2300000),
(3, 'Dewi Lestari',   'dewi@mail.com', NULL,           '081311122233', 'Jakarta',  NULL),
(4, 'Agus Pratama',   NULL,            NULL,           NULL,           'Surabaya',  890000),
(5, 'Rina Wulandari', 'rina@mail.com', '081377788899', NULL,           NULL,       6200000);

Gimana cara ganti NULL jadi nol?

Ini pemakaian paling sering. Dewi Lestari punya total_belanja NULL, dan itu bikin laporan kelihatan bolong.

SELECT nama, COALESCE(total_belanja, 0) AS total_belanja
FROM pelanggan;

Sekarang Dewi muncul dengan angka 0, bukan sel kosong. Laporan langsung enak dibaca.

Buat teks, gantinya bisa kalimat:

SELECT
    nama,
    COALESCE(email, 'belum ada email') AS email,
    COALESCE(kota, 'tidak diketahui')  AS kota
FROM pelanggan;

Gimana bikin fallback bertingkat?

Di sinilah COALESCE ngalahin IFNULL dan ISNULL. Dia bisa nerima argumen sebanyak yang kamu mau.

Kasusnya: tim CS Toko Berkah butuh satu kolom "kontak utama". Aturannya, pakai email dulu. Kalau kosong, pakai telepon. Kalau kosong juga, pakai WhatsApp.

SELECT
    nama,
    COALESCE(email, telepon, whatsapp, 'tidak ada kontak') AS kontak_utama
FROM pelanggan;

Hasilnya:

NamaKontak utamaDari kolom
Siti Rahayusiti@mail.comemail
Budi Santoso081298765432telepon (email NULL)
Dewi Lestaridewi@mail.comemail
Agus Pratamatidak ada kontaksemua NULL
Rina Wulandaririna@mail.comemail

Dari 312 pelanggan di dataset Toko Berkah, 47 orang nggak punya email tapi punya telepon. Tanpa COALESCE, tim CS bakal ngira 47 orang itu nggak bisa dihubungi sama sekali.

Gimana COALESCE bikin AVG dan SUM lebih akurat?

Fungsi agregat ngelewatin NULL, bukan nganggapnya nol. Ini yang bikin rata-rata kamu ketinggian.

SELECT
    AVG(total_belanja)              AS avg_lewatin_null,
    AVG(COALESCE(total_belanja, 0)) AS avg_null_jadi_nol
FROM pelanggan;

Yang kiri ngebagi Rp13.890.000 dengan 4 baris → Rp3.472.500.
Yang kanan ngebagi Rp13.890.000 dengan 5 baris → Rp2.778.000.

Selisihnya Rp694.500. Mana yang bener? Tergantung pertanyaannya.

  • "Rata-rata belanja dari pelanggan yang punya data belanja" → pakai AVG biasa.
  • "Rata-rata belanja per pelanggan terdaftar" → pakai COALESCE, karena yang NULL berarti belum belanja.

Yang penting kamu tau kamu lagi milih yang mana. Detail soal kenapa NULL kelakuannya gini, ada di artikel NULL di SQL.

Contoh kasus: laporan omzet per pelanggan

Pemilik Toko Berkah minta daftar semua pelanggan plus omzetnya — termasuk yang belum pernah belanja.

LEFT JOIN bakal ngasih NULL buat pelanggan tanpa transaksi. Itu bikin laporannya jelek.

SELECT
    p.nama,
    COALESCE(SUM(t.total_harga), 0) AS omzet
FROM pelanggan p
LEFT JOIN transaksi t ON t.pelanggan_id = p.id
GROUP BY p.nama
ORDER BY omzet DESC;

Pelanggan tanpa transaksi sekarang muncul dengan omzet 0, bukan kosong. Dan yang lebih penting: kolomnya bisa langsung di-SUM di Excel tanpa error.

Aturan praktis: setiap SUM atau COUNT setelah LEFT JOIN, bungkus pakai COALESCE.

Kombinasi COALESCE + NULLIF: aman dari pembagian nol

Ini kombo yang sering dipakai analis.

SELECT
    nama,
    COALESCE(total_belanja / NULLIF(jumlah_transaksi, 0), 0) AS rata_per_transaksi
FROM ringkasan_pelanggan;

Cara bacanya dari dalam:

  1. NULLIF(jumlah_transaksi, 0) — kalau jumlah transaksinya 0, ubah jadi NULL.
  2. Pembagian dengan NULL hasilnya NULL, bukan error. Query selamat.
  3. COALESCE(..., 0) — ubah NULL hasil pembagian tadi jadi 0.

Tanpa NULLIF, pembagian dengan nol bikin query mati total di PostgreSQL. Detailnya di artikel NULLIF SQL.

Kesalahan umum pakai COALESCE

1. Ngira string kosong itu NULL

String kosong ('') itu nilai beneran. COALESCE bakal nganggapnya valid dan langsung ngembaliin string kosong itu.

-- Nggak ngefek kalau catatan isinya ''
SELECT COALESCE(catatan, 'tidak ada catatan') FROM pelanggan;

-- Yang bener
SELECT COALESCE(NULLIF(catatan, ''), 'tidak ada catatan') FROM pelanggan;

2. Naruh COALESCE di WHERE

WHERE COALESCE(kota, 'X') = 'Jakarta' bikin database nggak bisa pakai index kolom kota. Dia harus ngecek semua baris satu per satu.

Tulis ulang jadi WHERE kota = 'Jakarta' — baris NULL emang bakal kebuang, dan itu biasanya yang kamu mau. COALESCE tempatnya di SELECT.

3. Nyampur tipe data

COALESCE(total_belanja, 'kosong') bakal error. Angka dan teks nggak bisa disatuin. Samain tipenya, atau CAST dulu.

4. Rantai fallback kepanjangan

Kalau kamu butuh 6 fallback, itu tanda tabelnya perlu dirapikan, bukan query-nya dipanjangin. Orang lain bakal susah nebak kolom mana yang beneran kepakai.

COALESCE vs IFNULL vs ISNULL

FungsiDatabaseJumlah argumen
COALESCESemua (standar SQL)Banyak
IFNULLMySQL, SQLite2
ISNULLSQL Server2
NVLOracle2

Kalau ragu, pakai COALESCE. Query kamu bakal tetap jalan waktu perusahaan pindah dari MySQL ke PostgreSQL. Definisi resminya bisa kamu cek di dokumentasi conditional expressions PostgreSQL.

FAQ

Apa bedanya COALESCE, IFNULL, dan ISNULL?

COALESCE itu standar SQL dan jalan di semua database besar, plus bisa nerima banyak argumen sekaligus. IFNULL cuma ada di MySQL dan maksimal 2 argumen. ISNULL punya SQL Server, juga 2 argumen doang. Kalau query kamu mungkin dipindah antar database, pakai COALESCE — nggak perlu diubah sama sekali.

Apakah COALESCE bisa dipakai buat string kosong?

Nggak bisa langsung. String kosong ('') itu nilai beneran, bukan NULL, jadi COALESCE bakal nganggapnya valid dan langsung ngembaliin string kosong itu. Kalau kamu mau string kosong juga diganti, gabungin sama NULLIF: COALESCE(NULLIF(catatan, ''), 'tidak ada catatan').

Apakah COALESCE bikin query jadi lambat?

Fungsi COALESCE-nya sendiri ringan. Yang bikin lambat itu kalau kamu naruh COALESCE di kolom yang ada di WHERE — misalnya WHERE COALESCE(kota,'X') = 'Jakarta'. Database jadi nggak bisa pakai index kolom kota dan harus scan semua baris. Taruh COALESCE di SELECT, jangan di WHERE.

Berapa maksimal argumen di COALESCE?

Nggak ada batas praktis yang bikin repot — PostgreSQL dan MySQL ngizinin puluhan argumen. Tapi kalau kamu udah butuh lebih dari 3-4 fallback, biasanya itu tanda struktur tabelnya perlu dirapikan. Rantai fallback panjang di query bikin orang lain susah nebak kolom mana yang beneran dipakai.

Kenapa COALESCE aku error tipe data?

Semua argumen COALESCE harus punya tipe data yang bisa disatuin. COALESCE(total_belanja, 'kosong') bakal error karena kamu nyampur angka dengan teks. Solusinya, samain tipenya: pakai COALESCE(total_belanja, 0) buat angka, atau konversi dulu pakai CAST kalau memang mau hasilnya teks.

Penutup

Tiga hal yang bikin COALESCE kepakai tiap hari:

  • Ngambil nilai pertama yang bukan NULL — bisa 2 argumen, bisa 5.
  • Wajib dipasang setelah LEFT JOIN kalau kamu SUM atau COUNT.
  • Taruh di SELECT, jangan di WHERE, biar index tetap kepakai.

Coba sekarang: ambil satu laporan kamu yang masih ada sel kosongnya, bungkus kolom itu pakai COALESCE, dan lihat bedanya waktu dibuka orang non-teknis.

Lanjut belajar cara nyegah error pembagian nol di NULLIF SQL, atau latihan langsung di halaman fungsi COALESCE NgulikData.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel Terkait

7 SQL Client Gratis Terbaik buat Analis Data (2026)
Tutorial SQL
10 Juli 2026•9 menit baca

7 SQL Client Gratis Terbaik buat Analis Data (2026)

Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.

BimaBima
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Tutorial SQL
7 Juli 2026•9 menit baca

SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim

Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.

BimaBima
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Tutorial SQL
4 Juli 2026•11 menit baca

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya

Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore