【初心者用】SQLのクエリ操作基礎3

タイトル通りですが、SQL初心者がクエリ操作に関して学んだことまとめていきます。

操作方法について忘れていることが分からないことが多いので、基礎を学んでいきます。

1. 平均を計算

◆AVG関数

SQLで数値の平均を計算する場合には、AVGを使用して「AVG(カラム名)」の様に使用します。
  

AVG(カラム名)

◆AVG関数

AVG関数はSELECTで取得するカラムに称することができ、それに対して計算結果を取得することができます。


SELECT AVG(カラム名)
FROM テーブル名;

◆WHEREとAVG関数

AVG関数はWHEREと併用して使用することができ、特定の条件で数値の平均を取得することができます。


SELECT AVG(カラム名)
FROM テーブル名
WHERE カラム名 = "特定の文字";

2. データのカウント

「COUNT関数」は指定したカラムのデータ合計数を取得することができ、「COUNT(カラム名)」と記述することでカラムのデータ数を計算できます。


COUNT(カラム名)

◆COUNT関数とNULL

 「COUNT関数」で指定したカラムで、NULLが含まれているデータはカウントされません。

◆COUNT関数の使用方法

「COUNT関数」でNULLの数も含めて計算する場合は、カラム名の指定に「*」指定する必要があります。

「*」を使用した場合は、特定のカラムのデータ数ではなく、「レコードの数」を計算します。

ですので、NULLも含めてデータ数を計算することができます。


SELECT COUNT(*)
FROM テーブル名;

◆WHEREとCOUNT関数

「COUNT関数」はWHEREと併用して使用することができ、特定の条件のデータ数をカウントすることができます。


SELECT COUNT(*)
FROM テーブル名
WHERE カラム名 = "特定の文字";
※特定の文字に指定している文字のレコードを検索

3. 最大値・最小値の取得

◆MAX・MIN関数

SQLで「MAX関数」を使用すると指定したカラムから最大値を取得することができます。

また、「MIN関数」を使用することで最小値を取得することができます。


MAX(カラム名)
MIN(カラム名)

◆MAX・MIN関数の使用方法

MAX・MINでもSELECTで取得したカラムに対して使用することができます。

数値データが保存されているカラム名を指定することで、そのカラム名の中から最大・最小の値を取得できます。


SELECT MAX(カラム名)
FROM テーブル名;

◆WHEREとMAX・MIN関数の併用

MAX・MIN関数もWHEREと併用して使用することができ、特定の条件で最小・最大の値を取得できます。


MAX(カラム名)
FROM テーブル名
WHERE カラム名 = "特定の文字";
※検索したレコードの中で、特定の文字の中で最大値を取得する。

4. データのグループ化

◆GROUP BY

「GROUP BY」を使用することで、データをグループ化することができます。
「GROUP BY カラム名」と指定することで、完全に同一のデータを持つレコードをまとめます。


GROUP BY カラム名

◆グループ化と集計について

グループ化を行うために、集計関数を取得するテーブルを指定のFROMの後ろに「GROUP BY カラム名」を記述する必要があります。

これにより、各グループごとにデータが集計されます。


SELECT SUM(カラム名),グループ化する基準のカラム名
FROM テーブル名
GROUP BY グループ化する基準のカラム名;

◆GROUP BYの注意点

GROUP BYを使用する場合は、SELECTで使用できるのは「GROUP BYに指定しているカラム名」か「集計関数」のみとなります。


・正しい記述 
SELECT SUM(カラム名),グループ化する基準のカラム名
FROM テーブル名
GROUP BY グループ化する基準のカラム名;
※集計関数もあり、GROUP BYで指定しているカラムも指定されている。

・間違った記述
SELECT カラム名,グループ化する基準のカラム名
FROM テーブル名
GROUP BY グループ化する基準のカラム名;
※GROUP BYで指定しているカラム名とは別のカラム名が、SELECTで指定されている。

5. 複数カラムでのGROUP BYの使用方法

GROUP BYは複数のカラム名を指定することができ、カラム名をコンマで繋げて使用します。
 

GROUP BY カラム名1、カラム名2

◆複数カラムのGROUP BYの記述方法

SELECT SUM(カラム名),グループ化するカラム名1、グループ化するカラム名2
FROM テーブル名
GROUP BY グループ化するカラム名1,グループ化するカラム名2;

◆複数カラムのGROUP BY

集計関数を使用することにより、各グループごとにデータを集計することができます。

それぞれグループ化したデータに対して、各関数を用いて使用することができます。

6. 細かい条件でのグループ化

◆WHEREとGROUP BY

GROUP BYはWHEREと併用することができ、WHEREを最初に記述しそのあとGROUP BYと関数を実行します。


SELECT COUNT(*)←集計関数
FROM テーブル名
WHERE 条件
GROUP BY カラム名1,カラム名2;
※WHERE分の後に記述

実行順
検索→グループ化→関数

7. グループ化したデータをさらに絞り込む

◆HAVING

「GROUP BY」でグループ化したデータをさらに絞り込む場合には、「HAVING」を使用して条件を満たすグループをス得することができます。
 

GROUP BY カラム名
HAVING 条件;

◆WHEREとHAVING

グループ化した後のデータを絞り込む際に、HAVINGを使用するのはコマンドの実行順によるためです。

検索→グループ化→関数→HAVINGの様に実行されていくため、GROUP BYのあとに実行されているHAVINGを使用する必要があります。


WHERE → GROUP BY → 関数 → HAVING

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

実行順によって検索対象が変更されてしまうので、WHEREとHAVINGには違いがあります。

WHEREはグループ化前のテーブル全体を検索対象とし、HAVINGはGROUP BYでグループ化されたデータを検索対象とします。


WHERE:グループ化されていないテーブルが対象
HAVING:GROUP BYでグループ化されたデータが検索対象

◆HAVINGの記述例と注意点

HAVINGはグループ化された後のテーブルから検索する為に、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使用する必要があります。
  

SELECT SUM(price),グループ化する基準のカラム名1
FROM テーブル名
GROUP BY グループ化する基準のカラム名1
HAVING SUM(price) > 1000;
※グループ化された後のカラムのデータを使用する