Fungsi Matematika SQL: ABS, POWER, MOD, dan Kawan-kawan
TL;DR
Fungsi matematika SQL yang paling sering dipakai analis ada sepuluh: ABS, ROUND, CEIL, FLOOR, MOD, POWER, SQRT, SIGN, TRUNC, dan RANDOM. ABS berguna buat hitung selisih tanpa peduli arah, MOD buat bagi data jadi grup, dan ROUND buat merapikan angka di laporan. Semuanya jalan di PostgreSQL dan MySQL dengan sintaks yang mirip.
Fungsi matematika SQL sering dianggap remeh, sampai kamu perlu hitung deviasi target dan bingung kenapa hasilnya minus.
Ini sepuluh yang beneran kepakai di kerjaan analis. Bukan daftar lengkap — daftar yang berguna.
1. ABS — buang tanda minus
ABS ngasih nilai absolut: angka negatif jadi positif, angka positif tetap.
SELECT ABS(-4750000) AS deviasi; -- 4750000
Kepakai tiap kali kamu mau tau seberapa jauh tanpa peduli ke arah mana.
SELECT cabang,
realisasi - target AS selisih,
ABS(realisasi - target) AS deviasi
FROM transaksi
ORDER BY deviasi DESC;
Tanpa ABS, cabang yang meleset jauh ke bawah bakal ada di urutan terakhir waktu diurutkan. Padahal itu yang paling perlu diperhatiin.
2. ROUND — rapikan angka laporan
ROUND bulatin ke angka terdekat. Argumen kedua nentuin berapa angka di belakang koma.
SELECT ROUND(94.4972, 1) AS persen; -- 94.5
SELECT ROUND(1234567, -3) AS ribuan; -- 1235000
Argumen negatif bikin dia bulatin ke kiri koma. Berguna buat laporan yang nggak butuh presisi rupiah.
Bahasan lebih dalam soal pembulatan ada di ROUND SQL.
3. CEIL — selalu bulat ke atas
CEIL (atau CEILING) selalu naik ke bilangan bulat berikutnya. 4.1 jadi 5. 4.9 juga jadi 5.
-- Berapa dus yang dibutuhkan? Satu dus isi 12 item.
SELECT cabang,
jumlah_item,
CEIL(jumlah_item / 12.0) AS jumlah_dus
FROM transaksi;
128 item butuh 11 dus, bukan 10,67 dus. Sisa 8 item tetap butuh satu dus tambahan.
Perhatiin 12.0, bukan 12. Titik nol itu penting — aku jelasin kenapa di bawah.
4. FLOOR — selalu bulat ke bawah
Kebalikan CEIL. 4.9 jadi 4.
-- Berapa kelompok utuh isi 10 orang?
SELECT FLOOR(47 / 10.0) AS kelompok_penuh; -- 4
Ada 7 orang sisa yang nggak cukup bikin satu kelompok penuh. FLOOR yang ngasih tau itu.
5. TRUNC — potong desimal, jangan bulatin
TRUNC keliatan sama kayak FLOOR, sampai kamu ketemu angka negatif.
SELECT FLOOR(-4.3) AS pakai_floor, -- -5
TRUNC(-4.3) AS pakai_trunc; -- -4
FLOOR turun ke bawah di garis bilangan. TRUNC cuma motong desimalnya.
Buat angka positif dua-duanya sama. Buat kolom retur atau selisih yang bisa minus, pilih yang sesuai maksud kamu.
6. MOD — sisa bagi (dan cara bagi grup)
MOD ngasih sisa pembagian. MOD(7, 3) hasilnya 1.
Kelihatan kayak pelajaran SD. Tapi ini fungsi favorit aku buat bagi data jadi grup.
-- Bagi baris jadi 2 kelompok buat A/B test
SELECT id, cabang,
MOD(id, 2) AS grup
FROM transaksi;
Hasilnya 0 atau 1. Konsisten — baris yang sama selalu dapat grup yang sama, bahkan kalau query-nya dijalankan ulang minggu depan.
Mau 10 kelompok? MOD(id, 10). Mau cek ganjil-genap? MOD(angka, 2) = 0.
7. POWER — pangkat
SELECT POWER(2, 10) AS hasil; -- 1024
Jarang kepakai sendirian. Tapi wajib kalau kamu hitung statistik manual — variansi butuh kuadrat selisih.
8. SQRT — akar kuadrat
Pasangan POWER. Dua-duanya kepakai buat hitung standar deviasi tanpa fungsi bawaan:
SELECT ROUND(SQRT(AVG(POWER(realisasi - rata.avg_r, 2))), 0) AS std_dev
FROM transaksi,
(SELECT AVG(realisasi) AS avg_r FROM transaksi) rata;
Kebanyakan database udah punya STDDEV bawaan, jadi ini lebih buat ngerti logikanya daripada dipakai sehari-hari.
9. SIGN — positif, negatif, atau nol
SIGN cuma ngasih tiga kemungkinan: 1, -1, atau 0.
SELECT cabang,
CASE SIGN(realisasi - target)
WHEN 1 THEN 'Lampaui target'
WHEN -1 THEN 'Di bawah target'
ELSE 'Pas target'
END AS status
FROM transaksi;
Lebih ringkas dari nulis tiga kondisi perbandingan di CASE WHEN.
10. RANDOM — ambil sampel acak
-- PostgreSQL
SELECT * FROM transaksi ORDER BY RANDOM() LIMIT 10;
-- MySQL
SELECT * FROM transaksi ORDER BY RAND() LIMIT 10;
Berguna buat audit — ambil 10 transaksi acak, cek manual, lihat ada yang aneh nggak.
Hati-hati di tabel besar. ORDER BY RANDOM() maksa database ngurutin seluruh tabel dulu. Di tabel 10 juta baris, query 10 baris bisa makan 30 detik. Buat itu pakai TABLESAMPLE.
Jebakan yang bikin laporan kamu salah: pembagian integer
Ini yang paling sering bikin orang bingung sejam.
SELECT 7 / 2 AS hasil; -- 3, bukan 3.5
Kalau dua-duanya integer, SQL bikin hasilnya juga integer. Desimalnya dibuang, bukan dibulatkan.
Efeknya di laporan nyata:
-- SALAH: hasilnya 0 semua
SELECT cabang, realisasi / target * 100 AS persen FROM transaksi;
-- BENER: paksa jadi desimal
SELECT cabang, realisasi * 100.0 / target AS persen FROM transaksi;
Kenapa yang pertama 0? Karena realisasi / target dihitung duluan, hasilnya 0 (integer), terus dikali 100 tetap 0.
Dua perbaikan: kalikan 100.0 duluan, atau pakai CAST. Detail konversi tipe data ada di CAST dan CONVERT SQL.
Contoh kasus: pencapaian target toko_berkah
Dataset toko_berkah punya 12 cabang dengan target dan realisasi bulanan. Manajemen mau tau cabang mana yang paling jauh dari target — nggak peduli kelebihan atau kekurangan.
SELECT cabang,
ROUND(realisasi * 100.0 / target, 1) AS pencapaian,
ABS(realisasi - target) AS deviasi,
CASE SIGN(realisasi - target)
WHEN 1 THEN 'Lampaui' ELSE 'Meleset'
END AS arah
FROM transaksi
ORDER BY deviasi DESC;
Hasilnya bikin kaget. Cabang Jakarta yang selama ini dipuji karena lampaui target 7,6% ternyata punya deviasi rupiah paling besar dari semua cabang: Rp6,8 juta.
Artinya proses forecasting buat cabang itu yang paling meleset — walau melesetnya ke arah yang menyenangkan.
Tanpa ABS, insight ini nggak bakal keliatan. Cabang yang lampaui target selalu nangkring di atas waktu diurutkan biasa.
Ringkasan cepat
| Fungsi | Fungsinya | Contoh hasil |
|---|---|---|
ABS(-5) | Nilai absolut | 5 |
ROUND(4.56, 1) | Bulatin ke terdekat | 4.6 |
CEIL(4.1) | Selalu ke atas | 5 |
FLOOR(4.9) | Selalu ke bawah | 4 |
TRUNC(-4.3) | Potong desimal | -4 |
MOD(7, 3) | Sisa bagi | 1 |
POWER(2, 10) | Pangkat | 1024 |
SQRT(16) | Akar kuadrat | 4 |
SIGN(-8) | Tanda bilangan | -1 |
RANDOM() | Angka acak 0-1 | 0.4271 |
Semuanya jalan di PostgreSQL. Di MySQL, RANDOM namanya RAND dan TRUNC namanya TRUNCATE. Daftar lengkapnya ada di dokumentasi fungsi matematika PostgreSQL.
FAQ
Kenapa pembagian di SQL hasilnya bulat, bukan desimal?
Kalau dua-duanya bertipe integer, hasilnya juga integer dan desimalnya dibuang. Tulis 7 / 2.0 atau bungkus pakai CAST. Ini penyebab nomor satu persentase di laporan keluar 0 semua.
Apa bedanya FLOOR, CEIL, dan ROUND di SQL?
ROUND ke angka terdekat, CEIL selalu ke atas, FLOOR selalu ke bawah. Buat hitung jumlah dus, pakai CEIL — sisa 1 item tetap butuh 1 dus tambahan.
Apa bedanya FLOOR dan TRUNC?
Beda cuma di angka negatif. FLOOR(-4.3) hasilnya -5, TRUNC(-4.3) hasilnya -4. Buat angka positif, dua-duanya sama.
MOD di SQL buat apa selain hitung sisa bagi?
Buat bagi data jadi grup secara merata. MOD(id, 2) ngasih 0 atau 1 — pas buat A/B test. Konsisten tiap kali dijalankan.
Gimana cara ambil baris acak di SQL?
ORDER BY RANDOM() LIMIT n di PostgreSQL. Lambat di tabel besar karena harus ngurutin semua baris dulu. Buat tabel jutaan baris, pakai TABLESAMPLE.
Penutup
Tiga yang paling sering nyelametin aku:
- ABS buat ranking deviasi — yang meleset ke atas juga masalah.
- MOD buat bagi grup yang konsisten, bukan acak.
- Ingat pembagian integer. Kalikan 100.0, bukan 100.
Kalau kamu udah nyaman sama fungsi matematika, langkah berikutnya biasanya agregasi. Lanjut ke fungsi agregat SQL.
Mau latihan langsung tanpa install database? Coba modul latihan query di NgulikSQL.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel Terkait
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.
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.
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.