Lewati ke konten utama

Pernyataan CASE di PostgreSQL

Dalam tutorial ini, Anda akan belajar cara menulis kueri bersyarat di PostgreSQL menggunakan ekspresi kondisional PostgreSQL CASE.
Diperbarui 28 Sep 2026  · 7 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Ekspresi kondisional adalah salah satu elemen paling mendasar dari paradigma pemrograman apa pun. Ekspresi kondisional yang umum mencakup blok if-else dan kasus switch. Anda dapat merumuskan ekspresi kondisional di PostgreSQL menggunakan kasus WHEN-THEN yang sangat mirip dengan blok if-else. Dalam tutorial ini, Anda akan mempelajari caranya.

Sebelum mulai menulis kueri bersyarat, penting untuk menyiapkan database PostgreSQL lokal. Anda akan melakukannya di bagian pertama tutorial ini.

Catatan: Untuk dapat mengikuti tutorial ini, Anda perlu mengetahui dasar-dasar SQL dan PostgreSQL. Silakan segarkan kembali dasar-dasar tersebut dengan sumber berikut:

Menyiapkan database PostgreSQL secara lokal

Untuk menyiapkan database, Anda dapat mengikuti artikel ini. Setelah Anda berhasil me-restore cadangan, Anda akan dapat melihat tabel-tabel berikut di database:

  • countries
  • route_table
  • station_table
  • train_table

Namun, tutorial ini hanya menggunakan tabel countries. Silakan jelajahi tabel yang disertakan dalam cadangan database. Anda juga dapat membuat database dan tabel Anda sendiri. Jika Anda telah me-restore cadangan database, seharusnya sekarang Anda memiliki sebuah tabel (terisi dengan detail tentang berbagai negara di seluruh dunia). Sekarang mari kita bahas sekilas tabel countries.

Menjelajahi tabel countries secara singkat

Setelah me-restore database, Anda dapat melihat tabel tersebut di antarmuka pgAdmin yang disertakan dalam instalasi default PostgreSQL. Saat menjalankan pernyataan SELECT sederhana, Anda dapat mengetahui kolom-kolomnya, tipe datanya, serta baris yang terdapat di tabel tersebut -

database

Tabel ini memuat detail tentang total 206 negara berbeda dari berbagai kawasan di dunia. Berapa banyak kawasan tepatnya? Kueri di bawah ini akan memberi Anda jawabannya.

SELECT COUNT(DISTINCT(region)) from countries;

Ternyata ada 23 kawasan berbeda yang tercakup dalam tabel ini seperti Eropa Barat, Polinesia, Timur Tengah, dan seterusnya. Anda dapat menjelajahi tabel dengan pertanyaan cepat versi Anda sendiri, dan sepanjang proses, mungkin Anda menemukan fakta-fakta menarik. Sekarang mari kita lihat anatomi dasar sebuah CASE di PostgreSQL.

Pengantar CASE di PostgreSQL

Berikut adalah bentuk umum sebuah case PostgreSQL dengan konstruksi WHEN-THEN -

CASE
     WHEN condition_1  THEN result_1
     WHEN condition_2  THEN result_2
     ...
     ELSE  result_n
END

Berikut beberapa poin penting yang perlu Anda ingat saat menyusun CASE di PostgreSQL:

  • Setiap kondisi adalah ekspresi boolean dan berdasarkan keluarannya hasil dipilih. Jika semua ekspresi yang berkaitan dengan WHEN dievaluasi menjadi False, maka hasil pada bagian ELSE yang ditampilkan. Jika Anda tidak menentukan bagian ELSE, kueri akan mengembalikan null.

  • Sebuah kondisi umumnya diterapkan pada sebuah kolom yang ada di tabel yang sedang Anda operasikan. Konstruksi kueri bersyarat seperti di atas biasanya dilakukan dengan pernyataan SELECT. Perlu diingat, kolom yang Anda gunakan untuk ekspresi boolean (dalam CASE) harus ada di pernyataan SELECT pada kueri Anda. Namun saat Anda menggunakan CASE berpasangan dengan klausa WHERE, Anda tidak harus mengikuti ini (lebih lanjut tentang ini nanti).

  • Tipe data hasil harus seragam. Anda tidak dapat mengembalikan sebuah string di result_1 dan sebuah integer di result_2 dan seterusnya.

Sekarang mari kita lihat beberapa contoh.

Mari mulai dari yang sederhana. Sekarang Anda akan menulis sebuah CASE untuk mengelompokkan negara-negara berdasarkan tahun kemerdekaan. Tahun kemerdekaan dicatat di kolom indep_year. Misalkan Anda memiliki tiga kelompok tahun kemerdekaan negara yang perlu diikuti. Anda akan membuat tiga kelompok tahun kemerdekaan berikut -

  • Sebelum 1900 (indep_year < 1900)
  • Antara 1900 dan 1930 (indep_year <= 1930)
  • Setelah 1930 (indep_year > 1930)

Hasil akhir kueri harus memuat kolom-kolom berikut -

  • name (nama negara)
  • continent (benua tempat negara tersebut berada)
  • indep_year
  • Dan kelompok tahun kemerdekaan yang akan Anda buat. Mari kita beri nama indep_year_group.

Sekarang mari tulis kuerinya -

SELECT name, continent, indep_year,
    CASE WHEN indep_year < 1900 THEN 'before 1900'
         WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
         ELSE 'after 1930' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

(Kueri ini terinspirasi dari kursus Joining Data in SQL milik DataCamp.)

Setelah mengeksekusi kueri, Anda akan melihat banyak negara seperti Palestina, Puerto Riko, dan lain-lain yang tidak memiliki tahun kemerdekaan di tabel. Karena itu mereka masuk ke kelompok between 1900 and 1930.

CASE di PostgreSQL dapat memiliki banyak kondisi. Ada beberapa entri di tabel di mana nama negara dan ibu kotanya sama. Anda dapat menambahkan hal ini ke CASE yang sebelumnya Anda buat -

SELECT name, continent, indep_year,
    CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
         WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
         ELSE 'after 1930_and_no_same_capital' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

Hal menarik lain tentang CASE adalah Anda dapat memasangkannya dengan fungsi agregat seperti SUM(). Untuk menerapkan CASE dengan fungsi agregat SUM(), Anda memerlukan tabel berbeda di mana ini masuk akal. Mari buat tabel sederhana bernama student_grades dengan kolom dan tipe data berikut -

  • student_name (string)
  • student_stream (string)
  • student_grade (karakter)

Kueri berikut membuat tabel untuk Anda -

CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);

Sekarang mari masukkan beberapa rekaman ke tabel. Anda dapat melakukannya menggunakan beberapa pernyataan INSERT. Misalkan setelah penyisipan, tabel student_grades kini memiliki rekaman berikut -

table

Sekarang, Anda akan menulis sebuah CASE untuk mendapatkan jumlah siswa yang termasuk dalam kelompok nilai tertentu. Seperti yang Anda lihat, sesuai isi tabel, ada tiga nilai yang berbeda - A, B, dan C. Kueri bersyarat harus mengembalikan keluaran yang serupa dengan berikut ini -

table

Kuerinya adalah sebagai berikut -

SELECT
 SUM (
 CASE
 WHEN student_grade = 'A' THEN
 1
 ELSE
 0
 END
 ) AS "High Scoring",
 SUM (
 CASE
 WHEN student_grade = 'B' THEN
 1
 ELSE
 0
 END
 ) AS "Mid Scoring",
 SUM (
 CASE
 WHEN student_grade = 'C' THEN
 1
 ELSE
 0
 END
 ) AS "Low Scoring"
FROM
 student_grades;

Beginilah cara Anda dapat memasangkan CASE dengan fungsi agregat untuk menemukan fakta-fakta menarik tentang data.

Kesimpulan dan bacaan lanjutan

Itu saja untuk tutorial ini. Dalam tutorial ini, Anda mempelajari cara memasukkan pengkondisian seperti if-then ke dalam kueri SQL Anda untuk menghasilkan pelaporan yang menarik. Anda mengerjakan beberapa contoh untuk memperkuat keterampilan ini. Jika Anda mencari latihan yang lebih menantang, Anda sebaiknya mengikuti kursus DataCamp berikut tentang SQL -

Jangan ragu untuk mengirimkan pertanyaan Anda tentang tutorial ini melalui bagian Comments.

Topik
SQL
Data Science

Kursus SQL

{count, plural, one {Kursus} other {Kursus}}

Manipulasi Data di SQL

{hours} jam
337.7K
Kuasai kueri SQL yang kompleks yang diperlukan untuk menjawab berbagai pertanyaan ilmu data dan menyiapkan set data yang kuat untuk analisis di PostgreSQL.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya