Hari 24: CTE — Common Table Expressions
60 min
Last updated 25 Mar 2026
CTE — Query Sementara yang Bisa Diberi Nama
CTE (WITH clause) membuat "tabel sementara" yang hanya hidup selama satu query. Lebih mudah dibaca daripada subquery bertingkat.
-- Syntax dasar
WITH nama_cte AS (
SELECT ...
)
SELECT * FROM nama_cte;
-- Contoh: Top pelanggan
WITH ringkasan_pelanggan AS (
SELECT
pelanggan_id,
COUNT(*) AS jumlah_pesanan,
SUM(total_harga) AS total_belanja
FROM pesanan
GROUP BY pelanggan_id
)
SELECT
pl.nama,
rc.jumlah_pesanan,
rc.total_belanja
FROM pelanggan pl
INNER JOIN ringkasan_pelanggan rc ON pl.id = rc.pelanggan_id
ORDER BY rc.total_belanja DESC;
Multiple CTE
WITH cte1 AS (...),
cte2 AS (... FROM cte1 ...)
SELECT * FROM cte2;
💡
Notice: CTE didefinisikan sebelum query utama dengan kata kunci WITH.
Assignment
Gunakan CTE bernama "statistik_produk" untuk menghitung per kategori_id: jumlah_produk, total_stok, avg_harga. Kemudian JOIN CTE tersebut dengan tabel kategori untuk tampilkan nama_kategori.
Expected output:
5 row(s) returned
SQL
query.sql
Solution
Output
⏳ Loading DB...