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

集約MySQL関数は常に単一の行を返しますか?

    GROUP BYを使用する必要があります 希望する結果を得るには:

    SELECT
    order_id,
    part_id,
    SUM(cost) AS total
    FROM orders 
    WHERE order_date BETWEEN xxx AND yyy
    GROUP BY order_id, part_id
    

    これにより、結果がグループ化されます。 order_idを想定しているので、注意してください およびpart_id 複合PK、SUM(cost) 上記ではおそらく= costになります (一意であることが保証されている2つのフィールドの組み合わせによるグループ化のため。以下の相関サブクエリは、この制限を克服します。)

    フェッチされた非集計行は、GROUP BYで指定する必要があります 行。

    詳細については、GROUP BYに関するチュートリアルをご覧ください。 ここ:

    編集: 列を集計と非集計の両方として使用する場合、またはグループを分離する必要がある場合は、サブクエリを次のように使用する必要があります。

    SELECT
    or1.order_id,
    or1.cost,
    or1.part_id,
    (
      SELECT SUM(cost)
      FROM orders or2
      WHERE or1.order_id = or2.order_id
      GROUP BY or2.order_id
    ) AS total
    FROM orders or1
    WHERE or1.order_date BETWEEN xxx AND yyy
    



    1. プリズマ関係

    2. 一時テーブルのpostgresqlスレッドセーフ

    3. MySQLでのバルク挿入の問題

    4. mysqlカウントグループ