2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【SQL】GROUP BY

2
Last updated at Posted at 2021-11-14

はじめに

GROUP BYを使ってテーブルをグループ化してみます。

GROUP BY

テーブルshoppingのpriceの合計値を同じdateをまとめて求めたいと思います。
ScreenShot 2021-11-14 9.53.00.png

SELECT SUM(price), date
FROM shopping
GROUP BY date;

ScreenShot 2021-11-14 9.56.44.png

日付によってpriceの合計値が求められました。

GROUP BY (複数)

次に、複数バージョンを見ていきましょう。

こちらのshoppingテーブルの誰がいついくら使ったのかをグループ化したいとします。

ScreenShot 2021-11-14 9.58.53.png

先ほどのSQLコードとほとんど変わりません。カラムの指定を増やすだけです。

SELECT SUM(price), date, name
FROM shopping
GROUP BY date, name;

ScreenShot 2021-11-14 10.26.50.png

GROUP BY (WHERE)

次に、条件式WHEREとGROUP BYを使う方法を見ていきます。

categoryが食費で誰がいついくら使ったのかをグループ化してみます。

ScreenShot 2021-11-14 10.10.14.png

SELECT SUM(price), date, name
FROM shopping
WHERE category = "食費"
GROUP BY date, name;

ScreenShot 2021-11-14 10.27.39.png

注意点としては、GROUP BYをWHEREの後に書かないと正しいデータがグループ化されません。

GROUP BY (HAVING)

グループ化した後に何か条件をつけたい時に使います。

実行優先度は以下のようになります。

WHERE > GROUP BY > SUMなどの関数 > HAVING

よって、WHEREとHAVINGの違いはGROUP BYされる前と後に実行されるかです。

以下のテーブルでpriceが300以上のものだけ抜き出してみましょう。
ScreenShot 2021-11-14 10.29.38.png

まず、HAVINGを使う前まで書くと以下のようになります。

SELECT SUM(price), date
FROM shopping
GROUP BY date

ScreenShot 2021-11-14 10.32.08.png

ここでHAVINGを使ってpriceの合計値が300以上のものを抜き出します。

SELECT SUM(price), date
FROM shopping
GROUP BY date
HAVING SUM(price) >= 300;

ScreenShot 2021-11-14 10.32.59.png

HAVINGは関数やGROUP BYの後に実行されるので、グループ化して関数を使って合計値を求めてその後何か条件をつけたい時に使えますね。

おわりに

GROUP BYを使ってテーブルをグループ化してみました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?