はじめに
GROUP BYを使ってテーブルをグループ化してみます。
GROUP BY
テーブルshoppingのpriceの合計値を同じdateをまとめて求めたいと思います。

SELECT SUM(price), date
FROM shopping
GROUP BY date;
日付によってpriceの合計値が求められました。
GROUP BY (複数)
次に、複数バージョンを見ていきましょう。
こちらのshoppingテーブルの誰がいついくら使ったのかをグループ化したいとします。
先ほどのSQLコードとほとんど変わりません。カラムの指定を増やすだけです。
SELECT SUM(price), date, name
FROM shopping
GROUP BY date, name;
GROUP BY (WHERE)
次に、条件式WHEREとGROUP BYを使う方法を見ていきます。
categoryが食費で誰がいついくら使ったのかをグループ化してみます。
SELECT SUM(price), date, name
FROM shopping
WHERE category = "食費"
GROUP BY date, name;
注意点としては、GROUP BYをWHEREの後に書かないと正しいデータがグループ化されません。
GROUP BY (HAVING)
グループ化した後に何か条件をつけたい時に使います。
実行優先度は以下のようになります。
WHERE > GROUP BY > SUMなどの関数 > HAVING
よって、WHEREとHAVINGの違いはGROUP BYされる前と後に実行されるかです。
以下のテーブルでpriceが300以上のものだけ抜き出してみましょう。

まず、HAVINGを使う前まで書くと以下のようになります。
SELECT SUM(price), date
FROM shopping
GROUP BY date
ここでHAVINGを使ってpriceの合計値が300以上のものを抜き出します。
SELECT SUM(price), date
FROM shopping
GROUP BY date
HAVING SUM(price) >= 300;
HAVINGは関数やGROUP BYの後に実行されるので、グループ化して関数を使って合計値を求めてその後何か条件をつけたい時に使えますね。
おわりに
GROUP BYを使ってテーブルをグループ化してみました。






