sql >> Base de Datos >  >> RDS >> Mysql

MySQL relación de uno a muchos:GROUP_CONCAT o JOIN o ambos?

Adivinando a partir de su consulta, también hay order_id campo en su order_products tabla que no mencionaste en la definición de la tabla. Su consulta debería verse así:

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

Sin embargo, su esquema de base de datos es bastante extraño, parece que la tabla de pedidos podría eliminarse y esa fecha se movió a order_products, porque para cada fila de order_products tiene una referencia a la tabla de pedidos. Por lo general, es al revés:hay muchos pedidos para cada producto al que hace referencia el campo product_id en la tabla de pedidos. También la columna de fecha en los pedidos es de tipo varchar, ¿por qué no fecha o fecha y hora?