sql >> Databáze >  >> RDS >> Mysql

Vztah MySQL jeden k mnoha:GROUP_CONCAT nebo JOIN nebo obojí?

Podle vašeho dotazu existuje také order_id pole ve vašem order_products tabulka, kterou jste nezmínili v definici tabulky. Váš dotaz by pak měl vypadat takto:

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

Vaše schéma databáze je však docela divné, tabulka objednávek vypadá, že by mohla být odstraněna a toto datum přesunuto do order_products, protože pro každý řádek order_products máte odkaz na tabulku orders. Obvykle je to naopak - existuje mnoho objednávek pro každý produkt, na který odkazuje pole product_id v tabulce objednávek. Také sloupec data v objednávkách je typu varchar - proč ne datum nebo datum a čas?



  1. Jak mohu vytvořit pole seznamu s daty kurzoru v systému Android

  2. Extrémně pomalý start EF - 15 minut

  3. Převod mysql na mysqli - jak získat objekt superglobálního připojení?

  4. Vyberte až x řádků každé skupiny