WITH TotalPembelianPelanggan AS (
SELECT
p.id AS pelanggan_id,
p.nama_pelanggan,
ps.tanggal_pesan,
SUM(dp.jumlah * dp.harga_satuan) AS total_pembelian
FROM
pelanggan p
JOIN pesanan ps ON p.id = ps.pelanggan_id
JOIN detail_pesanan dp ON ps.id = dp.pesanan_id
WHERE
ps.tanggal_pesan IN ('2023-12-09', '2023-12-10')
GROUP BY
p.id, p.nama_pelanggan, ps.tanggal_pesan
),
Top3Pelanggan AS (
SELECT
pelanggan_id,
nama_pelanggan,
DATE_FORMAT(tanggal_pesan, '%e %M') AS tanggal,
total_pembelian,
ROW_NUMBER() OVER (PARTITION BY tanggal_pesan ORDER BY total_pembelian DESC) AS row_num
FROM
TotalPembelianPelanggan
)
SELECT
tp.tanggal,
tp.pelanggan_id,
tp.nama_pelanggan,
tp.total_pembelian,
0.15 * tp.total_pembelian AS diskon,
tp.total_pembelian - (0.15 * tp.total_pembelian) AS total_bayar_setelah_diskon
FROM
Top3Pelanggan tp
WHERE
tp.row_num <= 3
ORDER BY
tp.tanggal DESC, total_bayar_setelah_diskon DESC;
output :
No 2
Query :
SELECT
tanggal,
produk_id,
nama_produk,
total_penjualan
FROM (
SELECT
CASE
WHEN DATE(tp.tanggal_transaksi) = '2023-12-09' THEN '9 Desember'
WHEN DATE(tp.tanggal_transaksi) = '2023-12-10' THEN '10 Desember'
END AS tanggal,
dp.produk_id,
pr.nama_produk,
SUM(dp.jumlah) AS total_penjualan,
ROW_NUMBER() OVER (PARTITION BY DATE(tp.tanggal_transaksi) ORDER BY SUM(dp.jumlah) DESC) AS ranking
FROM
transaksi tp
JOIN pesanan ps ON tp.pesanan_id = ps.id
JOIN detail_pesanan dp ON ps.id = dp.pesanan_id
JOIN produk pr ON dp.produk_id = pr.id
WHERE
DATE(tp.tanggal_transaksi) IN ('2023-12-09', '2023-12-10')
GROUP BY
DATE(tp.tanggal_transaksi), dp.produk_id, pr.nama_produk
) AS ranked_data
WHERE
ranking = 1
ORDER BY
CASE tanggal WHEN '9 Desember' THEN 1 WHEN '10 Desember' THEN 2 END, total_penjualan DESC;
Output:
No 3
Query run :
SELECT * FROM transaksi_non_tunai_view;
Output :