Soal 1Manakah berikut yang merupakan hasil benar dari SELECT ROUND(3.84);?
Fungsi ③ — Fungsi Matematis (ROUND / FLOOR / CEILING) dan COALESCE
Artikel ketiga dari tiga artikel fungsi SQL. Mencakup fungsi matematis ROUND / FLOOR / CEILING / POWER dan COALESCE — yang mengembalikan nilai non-NULL pertama — menggunakan dataset staff dan test-score yang dimuat dari CSV.
Data yang digunakan di artikel ini — staff dan test_score
Artikel fungsi terakhir mencakup fungsi matematis dan COALESCE. Dengan fungsi matematis, kita akan menangani pembulatan, lantai, langit-langit, dan eksponensiasi pada nilai numerik seperti kolom salary. Dengan COALESCE, kita akan mencakup mengganti NULL dengan nilai lain.
Artikel ini menggunakan dua CSV. Paruh pertama (fungsi matematis) memakai tabel staff yang sama seperti sebelumnya (10 karyawan). Paruh kedua (COALESCE) membawa tabel baru test_score (8 siswa × 3 percobaan tes, dengan NULL). Di test_score, kolom score_1 / score_2 / score_3 punya NULL di tempat siswa tidak hadir dan tidak mengerjakan tes itu — sempurna untuk skenario realistis seperti «pakai nilai dari tes pertama yang siswa bisa kerjakan» untuk belajar cara COALESCE bekerja.
Fungsi matematis — ROUND / FLOOR / CEILING / POWER
Ini 4 fungsi utama untuk membentuk nilai numerik:
- ROUND(x, n): membulatkan ke n tempat desimal. Hilangkan n dan ia membulatkan ke integer
- FLOOR(x): lantai (membulatkan ke arah negatif tak hingga)
- CEILING(x) atau CEIL(x): langit-langit (membulatkan ke arah positif tak hingga)
- POWER(x, y): eksponensiasi (x pangkat y)
-- 1) ROUND: pembulatan
SELECT ROUND(3.14); -- 3 (integer)
SELECT ROUND(3.14, 1); -- 3.1 (1 tempat desimal)
-- 2) FLOOR: lantai
SELECT FLOOR(3.84); -- 3
-- Catatan: CEILING bekerja di MySQL / PostgreSQL / Oracle / SQL Server — SELECT CEILING(3.14); → 4
-- 3) POWER: eksponensiasi
SELECT POWER(3, 4); -- 81 (3 pangkat 4)
SELECT POWER(2, 10); -- 1024
-- 4) Pada kolom — bulatkan gaji bulanan
SELECT name, salary, ROUND(salary / 12.0) AS monthly
FROM staff;
| Input | ROUND (pembulatan) | FLOOR (lantai) | CEILING (langit-langit / tidak tersedia di console kursus ini) |
|---|---|---|---|
| 3.14 | 3 | 3 | 4 |
| 3.84 | 4 | 3 | 4 |
| 3.50 | 4 | 3 | 4 |
| -3.14 | -3 | -4 (ke arah negatif) | -3 |
COALESCE — mengembalikan nilai non-NULL pertama
`COALESCE(nilai1, nilai2, nilai3, ...)` mengevaluasi argumennya dari kiri ke kanan dan mengembalikan yang pertama tidak NULL. Jika semuanya NULL, ia mengembalikan NULL. Pakai kapan pun kamu ingin fallback untuk NULL: «pakai kolom utama jika punya nilai, kalau tidak kolom cadangan, kalau tidak nilai default».
Artikel ini memakai tabel test_score. Untuk setiap student_id, score_1 / score_2 / score_3 menyimpan nilai tes ke-1, 2, dan 3, dengan NULL di tempat siswa tidak hadir. Melewatkan (score_1, score_2, score_3, 0) ke COALESCE memberi kamu nilai dari tes pertama yang siswa bisa kerjakan, diperlakukan sebagai «nilai akhir». Menambahkan 0 di akhir berarti «jika dia bolos ketiganya, perlakukan sebagai 0».
-- 1) Cek dengan nilai literal
SELECT COALESCE(NULL, NULL, 'C'); -- 'C'
SELECT COALESCE(NULL, NULL, NULL); -- NULL
-- 2) Ambil nilai akhir dari tabel test_score
SELECT student_id, name, score_1, score_2, score_3,
COALESCE(score_1, score_2, score_3) AS first_score
FROM test_score;
-- 3) Pakai nilai default — «tidak hadir semua = 0 poin»
SELECT student_id, name,
COALESCE(score_1, score_2, score_3, 0) AS final_score
FROM test_score;
Versi 2 argumen bisa ditulis sebagai IFNULL
Untuk kasus 2 argumen yang lebih sederhana — «jika NULL, pakai nilai default; kalau tidak, nilai asli» — kamu juga bisa menulis IFNULL(kolom, default) (didukung baik di console kursus ini maupun MySQL). COALESCE(email, 'belum terdaftar') dan IFNULL(email, 'belum terdaftar') persis sama.
Ketika butuh 3 argumen atau lebih, pakai COALESCE. Karena COALESCE adalah standar SQL, bentuk yang sama bekerja di PostgreSQL, Oracle, SQL Server, dll. — pilihan yang lebih portable.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang dikembalikan SELECT FLOOR(3.84), CEILING(3.14);?
Soal 3Apa yang dikembalikan SELECT COALESCE(NULL, NULL, 'C', 'D');?