आपकी क्वेरी से अनुमान लगाया जा रहा है कि order_id
. भी है आपके order_products
. में फ़ील्ड तालिका आपने तालिका परिभाषा में उल्लेख नहीं किया है। तब आपकी क्वेरी इस तरह दिखनी चाहिए:
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
आपका डीबी स्कीमा काफी अजीब है, ऑर्डर टेबल ऐसा लगता है कि इसे हटाया जा सकता है और वह तारीख ऑर्डर_प्रोडक्ट्स में चली गई है, क्योंकि प्रत्येक ऑर्डर_प्रोडक्ट्स पंक्ति के लिए आपके पास ऑर्डर टेबल का संदर्भ है। आमतौर पर यह दूसरा तरीका है - ऑर्डर तालिका में product_id फ़ील्ड द्वारा संदर्भित प्रत्येक उत्पाद के लिए कई ऑर्डर हैं। ऑर्डर में दिनांक कॉलम भी varchar प्रकार का है - दिनांक या डेटाटाइम क्यों नहीं?