sql >> Database teknologi >  >> RDS >> Mysql

MySQL et til mange forhold:GROUP_CONCAT eller JOIN eller begge?

Ud fra din forespørgsel er der også order_id felt i din order_products tabel, du ikke nævnte i tabeldefinitionen. Din forespørgsel skal så se sådan ud:

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

Dit db-skema er dog ret underligt, ordretabellen ser ud til at kunne fjernes og den dato flyttes til ordre_produkter, fordi du for hver række ordre_produkter har reference til ordretabellen. Normalt er det den anden vej - der er mange ordrer for hvert produkt, der refereres af produkt_id-feltet i ordretabellen. Også datokolonne i ordrer er af typen varchar - hvorfor ikke dato eller datoklokkeslæt?



  1. Flerrækket indsats med pg-løfte

  2. Hash joins på nullable kolonner

  3. Tilføj interval til tidsstemplet ved hjælp af Ecto Fragments

  4. PostgreSQL-ækvivalent til Oracles PERCENTILE_CONT-funktion