Subquery, CASE WHEN, Fungsi String & Date
60 min
Last updated 24 Mar 2026
4.1 Subquery
Subquery adalah query di dalam query. Berguna untuk pertanyaan seperti "tampilkan produk yang harganya di atas rata-rata".
-- Produk yang harganya di atas rata-rata
SELECT nama_produk, harga
FROM produk
WHERE harga > (SELECT AVG(harga) FROM produk)
ORDER BY harga DESC;
-- Pelanggan yang pernah pesan lebih dari rata-rata
SELECT nama FROM pelanggan
WHERE id IN (
SELECT pelanggan_id
FROM pesanan
GROUP BY pelanggan_id
HAVING COUNT(*) > (SELECT AVG(cnt) FROM (SELECT COUNT(*) AS cnt FROM pesanan GROUP BY pelanggan_id))
);
4.2 CASE WHEN — Kondisi dalam Query
CASE WHEN seperti if-else di SQL.
-- Beri label segmen harga pada produk
SELECT nama_produk, harga,
CASE
WHEN harga < 100000 THEN 'Murah'
WHEN harga < 1000000 THEN 'Menengah'
ELSE 'Premium'
END AS segmen_harga
FROM produk
ORDER BY harga;
-- Klasifikasi umur pelanggan
SELECT nama, umur,
CASE
WHEN umur < 25 THEN 'Gen Z'
WHEN umur < 35 THEN 'Milenial'
ELSE 'Gen X+'
END AS generasi
FROM pelanggan;
4.3 Fungsi String
-- Ubah nama ke huruf besar
SELECT UPPER(nama) AS nama_besar FROM pelanggan LIMIT 5;
-- Gabungkan kolom
SELECT nama || ' (' || kota || ')' AS info FROM pelanggan LIMIT 5;
-- Cari pelanggan dengan nama mengandung "an"
SELECT nama FROM pelanggan WHERE nama LIKE '%an%';
4.4 Fungsi Date
-- Hitung lama jadi pelanggan (dalam hari)
SELECT nama, tanggal_daftar,
CAST((julianday('now') - julianday(tanggal_daftar)) AS INTEGER) AS hari_bergabung
FROM pelanggan
ORDER BY hari_bergabung DESC;
💡SQLite menggunakan
|| untuk menggabungkan string (bukan CONCAT seperti MySQL).
💡
Notice: Gunakan CASE WHEN untuk mengklasifikasikan data.
Assignment
Tampilkan nama produk, harga, dan kolom 'segmen' berdasarkan harga: 'Murah' (< 100rb), 'Menengah' (100rb–1jt), 'Premium' (> 1jt). Urutkan dari harga tertinggi.
Expected output:
-- Hasil: nama_produk + harga + segmen (Murah/Menengah/Premium)
SQL
query.sql
Solution
Output
⏳ Loading DB...