sql >> Databasteknik >  >> RDS >> Mysql

MySQL en till många-relation:GROUP_CONCAT eller JOIN eller båda?

Utifrån din fråga gissar det att det också finns order_id fältet i din order_products tabell som du inte nämnde i tabelldefinitionen. Din fråga bör då se ut så här:

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

Ditt db-schema är dock ganska konstigt, ordertabellen ser ut att kunna tas bort och det datumet flyttas till order_products, eftersom du för varje order_products-rad har referens till ordertabellen. Vanligtvis är det åt andra hållet - det finns många beställningar för varje produkt som refereras av produkt_id-fältet i beställningstabellen. Även datumkolumnen i beställningar är av typen varchar - varför inte datum eller datumtid?



  1. laravel 5.6 bulk infogar json-data

  2. Varför avbryter Hibernate/JDBC/MySQL anslutningar efter någon dag?

  3. Hur man korrekt gör upsert i postgres 9.5

  4. Begränsa antalet poster i en modell som kan ha ett värde per användare