SQL文について(実践)

テーマ:

前回は基本構文を学びましたが、

取得したデータの加工について今回は実践を学びたいと思います!

以下学の履歴です。

スタート!

 

DISTINCT

DISTINCTを用いると、検索結果から重複するデータを除くことが可能です。

「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができます。

 

 

DISTINCTは図のように、SELECTで取得するカラムに使用することで、重複を省いたデータを取得できます。
図ではpurchasesテーブルからnameカラムの重複したデータを省いて取得しています。

 

 

四則演算について

 

SQLでは四則演算「足す(+)、引く(-)、かける(*)、割る(/)」が可能です。

左の図のような記号を使うことで、右の図のようにカラムのデータを計算することが可能です。

かける場合はアスタリスク(*)、割る場合はスラッシュ(/)を用いることに注意しましょう。

 

 

関数の利用について

 

 

合計を求める

SUM関数

 

 

SUM関数はWHEREと併用することができます。
下の図では、WHEREを使うことで、にんじゃわんこが今まで使ったお金の合計金額を取得しています。

 

 

平均の求め方

AVG関数

 

AVG関数はSELECTで取得するカラムに使用することで、計算結果を取得することができます。

 

 

AVG関数はWHEREと併用することができます。
下の図では、WHEREを使うことで、にんじゃわんこが買った商品の平均金額を取得しています。

 

 

データの数を計算

COUNT関数

 

COUNT関数は、指定したカラムのデータの合計数を計算してくれる関数です。

図のように「COUNT( カラム名 )」とすることで、指定したカラムのデータの数を計算します。

 

 

COUNT関数でカラム名を指定した場合、nullになっているデータの数は計算されません。
右の図ではnullのデータが計算されていないため、4件と数えられます。

 

 

nullの数も含めてデータの数を計算したい場合は、

COUNT関数で * (全てのカラム)を指定します。* を使った場合、

特定のカラムのデータの数ではなく、レコードの数を計算します。この方法で、nullの数を含めてデータの数を数えられます。

 

 

COUNT関数はWHEREと併用することができます。
下の図ではWHEREによって、にんじゃわんこがいくつ商品を買ったかを取得しています。

 

 

MAX MIN 関数

SQLでMAXという関数を用いると、指定したカラムのデータの中から最大のデータを取得することができます。

同じく、MINと言う関数を用いることで、最小のデータを取得することができます。

 

 

MAX,MINも他の集計関数と同様にWHEREと併用することができます。
下の図ではWHEREを使うことでにんじゃわんこが使った1番高い金額を取得しています。

 

 

データのグループ化

GROUP BY

 

 

GROUP BYを用いると、データをグループ化することができます。

例えば図のように「GROUP BY カラム名」とすることで、指定したカラムで、

完全に同一のデータを持つレコードどうしが同じグループとなります。

 

 

 

グループ化するには、今までの集計関数を取得するFROMの後ろに「GROUP BY カラム名」を追加します。

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

 

 

GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。
図ではSELECTで集計関数を使っていないため、日付ごとに集計された値が取得できません。

 

 

カラムのグループ化

 

 

GROUP BYは複数のカラム名を適用させることができ、その場合は、カラム名同士をコンマ(,)で繋げます。
どのようにグループ化が行われ、集計されるのか、次のスライドで説明していきます。

 

 

 

集計関数により、各グループごとにデータを集計することができます。
例えば、下の図はそれぞれグループ化したデータに対してSUM関数とCOUNT関数を用いたものとなっています。

 

 

 

細かい条件設定でデータをグループ化

where と group by

 

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

下の図のようにWHEREはまず最初に、そのあとにGROUP BYと関数が実行されます。

 

 

where と group by の順番

今回のように日付とキャラクターごとの食費に使ったお金の合計を取得するときは、

①WHEREでカテゴリーが「食費」であるレコードを検索する

②日付とキャラクターでグループ化する 

①と②は下の図

 

 

③集計関数で集計するという順番になります。

③については下の図

 

 

WHERE と GROUP BYの書き方

 

 

グループ化データの絞り込み

HAVING

 

GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用います。

図のように「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得することができます。

 

 

Where と HAVING

 

グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、

SQLの各コマンドが以下の順番で実行されていくためです。

図のようにWHEREはまず最初に、そのあとにGROUP BYと関数が実行され、その後にHAVINGが実行されます。

 

 

Where と HAVING の違い

 

実行順序によって、WHEREとHAVINGは検索対象に違いがあります。

WHEREはグループ化される前のテーブル全体を検索対象とするのに対し、

HAVINGはGROUP BYによってグループ化されたデータを検索対象とします。

 

 

注意点

HAVINGはグループ化された後のテーブルから検索するため、

条件文で使うカラムは必ずグループ化されたテーブルのカラムを使います。

 

 

実践編はここまで!


お疲れ様でした。