Hari 22: Subquery di FROM & SELECT
55 min
Last updated 25 Mar 2026
Subquery di FROM (Derived Table)
Subquery di FROM menghasilkan "tabel sementara" yang bisa di-query lagi.
-- Rata-rata penjualan per pelanggan
SELECT
AVG(total_per_pelanggan) AS rata_belanja_pelanggan
FROM (
SELECT pelanggan_id, SUM(total_harga) AS total_per_pelanggan
FROM pesanan
GROUP BY pelanggan_id
) AS ringkasan;
-- Ranking produk per kategori berdasarkan stok
SELECT *
FROM (
SELECT
nama_produk, kategori_id, stok,
ROW_NUMBER() OVER (PARTITION BY kategori_id ORDER BY stok DESC) AS rank_stok
FROM produk
) WHERE rank_stok = 1;
Subquery di SELECT (Correlated)
-- Hitung jumlah pesanan per pelanggan langsung di SELECT
SELECT
pl.nama,
(SELECT COUNT(*) FROM pesanan p WHERE p.pelanggan_id = pl.id) AS jumlah_pesanan
FROM pelanggan pl
ORDER BY jumlah_pesanan DESC;
💡
Notice: Subquery korelasi dieksekusi sekali per baris tabel luar — berguna tapi bisa lambat pada data besar.
Assignment
Gunakan subquery di SELECT: tampilkan nama setiap pelanggan dan jumlah pesanannya (subquery korelasi). Urutkan dari yang terbanyak pesan.
Expected output:
15 row(s) returned
SQL
query.sql
Solution
Output
⏳ Loading DB...