{count, plural, one {Kursus} other {Kursus}}
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 -

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
WHENdievaluasi menjadiFalse, maka hasil pada bagianELSEyang ditampilkan. Jika Anda tidak menentukan bagianELSE, 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 (dalamCASE) harus ada di pernyataanSELECTpada kueri Anda. Namun saat Anda menggunakanCASEberpasangan dengan klausa WHERE, Anda tidak harus mengikuti ini (lebih lanjut tentang ini nanti). -
Tipe data hasil harus seragam. Anda tidak dapat mengembalikan sebuah
stringdiresult_1dan sebuahintegerdiresult_2dan seterusnya.
Sekarang mari kita lihat beberapa contoh.
Menulis CASE di PostgreSQL
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 -

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 -

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.
