Fungsi Angka, CAST (::), COALESCE & CASE WHEN

Pembulatan dan hitungan angka, mengubah tipe data dengan CAST dan operator ::, mengganti NULL dengan COALESCE, NULLIF, serta logika jika-maka dengan CASE WHEN.

Part 11 dari 25 ± 40 menit Gratis

Analogi: COALESCE itu seperti ban serep: jika nilai utama kosong (NULL), pakai cadangan. CASE WHEN seperti papan penunjuk jalan di persimpangan: "jika harga di atas 100 ribu belok ke Premium, jika di atas 50 ribu ke Menengah, selebihnya ke Ekonomis".

Fungsi angka

FungsiContohHasil
ROUND(x, n)ROUND(3.14159, 2)3.14
CEIL(x) / FLOOR(x)CEIL(4.2) / FLOOR(4.8)5 / 4
ABS(x)ABS(-7)7
MOD(a, b) atau a % bMOD(10, 3)1
POWER(a, b)POWER(2, 10)1024

Mengubah tipe data: CAST dan ::

Kadang kamu perlu mengubah tipe, misalnya agar pembagian bilangan bulat menghasilkan desimal. PostgreSQL punya dua cara yang setara:

SELECT CAST(7 AS NUMERIC) / 2;    -- cara standar SQL     -> 3.5
SELECT 7::numeric / 2;            -- cara singkat khas Postgres -> 3.5
SELECT '2025-03-01'::date;        -- teks menjadi tanggal
SELECT harga::text FROM buku;     -- angka menjadi teks

Operator :: sangat sering muncul di kode PostgreSQL. Bacanya: "ubah ke tipe ...".

COALESCE: pengganti NULL

COALESCE(a, b, c) mengembalikan nilai pertama yang bukan NULL. Cocok untuk memberi nilai cadangan:

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

Solusi juga untuk jebakan sambung teks: 'Halo ' || COALESCE(nama, 'Tamu').

NULLIF: kebalikannya

NULLIF(a, b) mengembalikan NULL bila a sama dengan b. Berguna mencegah pembagian dengan nol: total / NULLIF(jumlah, 0).

CASE WHEN: jika-maka di dalam SQL

SELECT judul, stok,
  CASE
    WHEN stok = 0  THEN 'Habis'
    WHEN stok < 20 THEN 'Menipis'
    ELSE 'Aman'
  END AS status_stok
FROM buku;

SQL memeriksa WHEN dari atas ke bawah dan memakai yang pertama benar. Tanpa ELSE, hasilnya NULL bila tidak ada yang cocok. Jangan lupa menutup dengan END.

Analogi: CASE seperti pegawai butik yang memberi label harga: "Kalau harga < 50 ribu → Murah; kalau < 100 ribu → Sedang; selain itu → Premium."

CASE juga bisa dipakai di ORDER BY dan WHERE

SELECT judul FROM buku
ORDER BY CASE WHEN stok = 0 THEN 1 ELSE 0 END, judul;   -- yang habis ditaruh di bawah

Kasus nyata: label harga dan nilai default di laporan

Tim marketing meminta kolom kategori harga di laporan, dan email kosong harus tampil sebagai "belum diisi":

SELECT judul, harga,
  CASE
    WHEN harga >= 100000 THEN 'Premium'
    WHEN harga >= 50000  THEN 'Menengah'
    ELSE 'Ekonomis'
  END AS segmen
FROM buku;

SELECT nama, COALESCE(email, 'belum diisi') AS email FROM pelanggan;

Kesalahan yang sering terjadi

  • Lupa ELSE di CASE sehingga baris yang tidak cocok menjadi NULL tanpa disadari.
  • Urutan WHEN yang salah: kondisi pertama yang cocok yang menang, jadi tulis dari yang paling spesifik.
  • Menjumlahkan kolom yang bisa NULL tanpa COALESCE: 5 + NULL hasilnya NULL.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X