Materi
Pembeli bertanya tentang pesanannya, bukan tentang baris barangnya. Status pemenuhan di tingkat pesanan diturunkan dari baris: Lengkap bila semua baris sudah terkirim penuh, Belum bila belum satu unit pun terkirim, dan Sebagian bila ada yang sudah dan ada yang belum.
Di SQL, catatan pengiriman dijumlah dulu per pesanan dan per SKU, lalu digabung ke tabel baris dengan LEFT JOIN. LEFT JOIN mempertahankan baris pesanan yang belum punya pengiriman sama sekali; nilai terkirimnya NULL, dan coalesce(…, 0) mengubahnya menjadi 0 supaya bisa dihitung. Data pengiriman di latihan diberikan sebagai CTE (klausa WITH), seolah baru diekspor dari ekspedisi.
WITH total AS (
SELECT pesanan_id, produk_id, SUM(jumlah) AS terkirim
FROM kirim GROUP BY pesanan_id, produk_id
)
SELECT d.pesanan_id, d.produk_id, coalesce(t.terkirim, 0) AS terkirim
FROM detail_pesanan d
LEFT JOIN total t ON t.pesanan_id = d.pesanan_id AND t.produk_id = d.produk_idAgregasi sebelum JOIN itu penting: satu baris pesanan bisa punya dua resi, dan menggabungkan resi mentah langsung ke tabel lain menggandakan baris di sisi yang lain.