0
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 1 year has passed since last update.

SQL データのグループ化

Posted at

##GROUP BY
GROUP BYを用いると、データをグループ化することができます。「GROUP BY カラム名」とすることで、指定したカラムで、完全に同一のデータを持つレコードどうしが同じグループとなります。

グループ化するには、今までの集計関数を取得するFROMの後ろに「GROUP BY カラム名」を追加します。集計関数により、各グループごとにデータが集計されます。

※GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。

SELECT 
関数(カラム),カラム1
FROM テーブル名
GROUP BY カラム1 ;

####複数の場合

SELECT 
関数(カラム),カラム1,カラム2
FROM テーブル名
GROUP BY カラム1,カラム2;

####WHEREとGROUP BY
GROUP BYはWHEREとも併用することができ、その場合はWHEREの後に書きます。
WHEREとGROUP BYと集計関数は以下の順番で実行されていきます。WHEREはまず最初に、そのあとにGROUP BYと関数が実行されます。

SELECT 
関数(カラム),カラム1,カラム2
FROM テーブル名
WHERE カラム = "文字"
GROUP BY カラム1,カラム2;

##HAVING
GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用います。「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得することができます。

GROUP BY カラム
HAVING 条件;

####WHEREとHAVING
グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、SQLの各コマンドが以下の順番で実行されていくためです。WHEREはまず最初に、そのあとにGROUP BYと関数が実行され、その後にHAVINGが実行されます。

実行順序によって、WHEREとHAVINGは検索対象に違いがあります。WHEREはグループ化される前のテーブル全体を検索対象とするのに対し、HAVINGはGROUP BYによってグループ化されたデータを検索対象とします。

HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使います。

SELECT 
関数(カラム),カラム1,カラム2
FROM テーブル名
GROUP BY カラム1,カラム2
HAVING 関数(カラム) > 数値;
0
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
0
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?