【MySQL】GROUP BY句(グループ化)とGROUP BYを使った計算について徹底解説!
  • facebookページ
  • twitterページ
  • 2019.12.27

    【MySQL】GROUP BY句(グループ化)とGROUP BYを使った計算について徹底解説!

    MySQLに実装されている”GROUP BY”句を使えば、指定したカラムをまとめてグループ化することが出来ます。

    このGROUP BY句を使うことでデータの数を数えたり、平均値などの計算を容易にさせることが出来るようになります。

    今回はこのGROUP BYについて解説していきますので是非覚えてみてください。

    データのグループ化

    “GROUP BY”句はSELECT句と並行して使用することで、指定したカラムを基準としたグループにまとめて取得できます。

    記述は以下のようになります。

    値を計算させたい場合には、この様式に更にCOUNT関数などを足すことで指定したカラムを基準として計算させることも出来ます。

    COUNT関数を使った記述例は以下の通りです。

    なおグループ化すると取得できるデータはグループだけとなります。

    グループ化されたデータから条件を指定し、その条件に合うものだけを抽出する場合には、更にHAVING 句で抽出条件を記述します。

    この場合の記述は以下の通りとなります。

    ポテパンダの一言メモ

    WHERE句とHAVING句の違いについて

    WHERE句とHAVING句は同じような動きに思えますが、優先順位が全く異なります。

    具体的な違いは以下の通りです。

    WHERE句=グループ化する前に条件を抽出

    HAVING句=グループ化した後で条件を抽出

    MySQLでの動きを見る

    では実際にMySQLでの動きを見ていきましょう。

    まずは予め作っておいた表を見てみましょう。

    このようなテーブルがあるとします。

    まずは基本的なGROUP BYのみを使用してグループ化させてみましょう。

    グループで表示させると、リストの中には3種類のアイテムがあることが確認できます。

    では次に、type毎にpriceの合計を表示させてみましょう。

    合計を出すにはSUM関数を使用します。

    SUM関数を使用することで、種類毎に合計金額がいくらになるのかを出力出来たことが確認できます。

    続いてもう少し詳細にグループ化し、”type”と”color”の二つのグループで合計金額を出してみましょう。

    上のクエリでは、BagとWallet、そしてOtherをそれぞれ色毎にグループ化し、その合計金額を算出したクエリとなっています。

    結果を見ると”type”と”color”でグループ化され出力されていることが確認できます。

    COUNT関数を使う

    先ほども簡単に触れたように、COUNT関数を使えば指定したカラムをグループ化した上でグループ内の数を出力させることが出来ます。

    下の例を見てみましょう。

    上のクエリでは10000円以上の価格のアイテム個数を表示させています。

    Bagには2つ、Walletには1つのアイテムが存在することが確認できます。

    更にこの条件にHAVINGを使って2つ以上のアイテムが存在するレコードを表示させてみます。

    このように、GROUP BYの後ろに更に続けてHAVING句で条件を指定することで、より厳格な条件を指定し抽出することが確認できます。

    まとめ

    いかがでしたか?

    今回はGROUP BY句について色々なケースを紹介しながら解説してみました。

    データを表示させる際にはデータベース内で出来ることは完結に済ませた方が良い場合も多くあります。

    また場合によっては表示されるまでの時間やサーバーに係る負荷の軽減にも一役買ってくれることもあります。

    これらのコマンドを駆使してデータを効率よく取り出せるよう何度も繰り返し練習してみましょう。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE