Menebak dari query Anda juga ada order_id
di order_products
. Anda tabel yang tidak Anda sebutkan dalam definisi tabel. Kueri Anda akan terlihat seperti:
SELECT c.name AS category_name,
SUM( s.subtotal ) AS amt,
GROUP_CONCAT( CONCAT(s.name, ' - ', s.subtotal ) SEPARATOR ', ' ) AS subtotals
FROM
product_category c
JOIN
( SELECT op.category, op.name, sum(op.qty*op.unit_price) AS subtotal
FROM order_products op
JOIN orders o ON o.id = op.order_id
WHERE o.date > '2012-03-31'
GROUP BY op.category, op.name ) s
ON s.category = c.id
GROUP BY c.name
Skema db Anda cukup aneh, tabel pesanan sepertinya bisa dihapus dan tanggal itu dipindahkan ke order_products, karena untuk setiap baris order_products Anda memiliki referensi ke tabel pesanan. Biasanya sebaliknya - ada banyak pesanan untuk setiap produk yang dirujuk oleh kolom product_id di tabel pesanan. Juga kolom tanggal dalam pesanan bertipe varchar - mengapa tidak tanggal atau datetime?