MySQLのGROUP BY句の使い方
MySQLのGROUP BY句は結果セットを1つ以上の列でグループ化するために使用します。各グループに対して、カウント、合計、平均などの集計関数を組み合わせて計算し、集計データを生成します。
特定の列を元にグループ分けされた行を取り出すクエリを作成するための構文:
SELECT 列名1, 列名2, …
FROM 表名
WHERE 条件
GROUP BY 列名1, 列名2, …
HAVING 条件;
GROUP BY句では1つ以上の列名をカンマで区切って指定できます。その場合、結果はこれらの列でグループ化されます。複数の列名を指定したときは、グループ化は左から右の順に行われます。
GROUP BY句の後にはHAVING句を使って条件による絞り込みを行うことができる。HAVING句はWHERE句と似ているが、一行ごとの絞り込みではなく、グループ化後の結果に対する絞り込みを行う。HAVING条件を満たしたグループだけが結果セットに含まれる。
GROUP BYを使用すると以下のことが実現します。
- 集計値で結果セットをグループ化します。
- 条件に合致するグループのみを保持するように、グループ化した結果をフィルタリングする。
- グループ化した結果をソートする。
ご注意ください。
- GROUP BY句に出現している列名か定数しか使えないのは、集計関数以外では選択句です。
- GROUP BY句を使用する場合、SELECT句には必ず集約関数、またはGROUP BY句の列を少なくとも1つは含める必要がある。
- GROUP BY 節でカラム名のエイリアスを使用することができます。
- GROUP BY 句の順番は結果の集合には影響せず、グループの順序にのみ影響します。
ordersという名前のテーブルに、order_id、customer_id、order_date、total_amountの列があると仮定します。各顧客の注文の合計金額を計算するには、次のクエリを使用できます。: customer_id、total_amountの合計(total_order_amountとして)
ordersから抽出
customer_idでグループ化;
customer_idでgroup化し、グループごとの合計金額を計算するクエリ。結果セットには各顧客のcustomer_idと合計オーダー金額total_order_amountが含まれる。