Learn
← Previous Next →

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...