sql >> データベース >  >> RDS >> Mysql

MySQLの1対多の関係:GROUP_CONCATまたはJOIN、あるいはその両方?

    クエリから推測すると、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
    

    ただし、dbスキーマは非常に奇妙ですが、ordersテーブルは削除され、その日付がorder_productsに移動されたように見えます。これは、すべてのorder_products行に対してordersテーブルへの参照があるためです。通常は逆です。ordersテーブルのproduct_idフィールドで参照されるすべての製品に多くの注文があります。また、注文の日付列はvarcharタイプです-なぜ日付または日時ではないのですか?



    1. WooCommerceで変動する商品価格を変更するMySQLクエリ

    2. MySQL-MINを検索しますが、ゼロは検索しません

    3. Oracleで文字列を分割する方法

    4. MySQLトリガーのデバッグ