テーブルのデータが増えてきて、そのテーブルの平均や合計などの集約を結果を表示させたい場合が出てきます その場合のSQL文をいくつか紹介していきたいと思います
<h2>テーブルを集約して検索方法</h2>
データに対してSQL文で計算などを行う時には『関数』を使用
COUNT | 列数を数える |
SUM | 各行の値を合計する |
AVG | 各行の値の平均値を求める |
MAX | 各行の値の最大値を求める |
MIN | 各行の値の最小値を求める |
青枠が列の最大値
赤枠が列の最小値になります
COUNT関数
関数とは、何らかのデータを関数という箱のようなイメージの中に入力したら、別のデータに変換して出力すると、いうイメージを持ってみてください(´ー`)
入力のことを『引数』『パラメータ』、出力のことを『戻り値』と、呼びます
先程のテーブル(テーブル名「ギニュー特戦隊」)データで考えてみましょう
まずはSQL文を書いてみます
SELECT COUNT (*) FROM ギニュー特戦隊;
結果は『5』と出ます
COUNT関数で列の合計値を出す命令をし、(*)で列全体を選択しています
行全体はCOUNT(*)
NULL以外の行を数える時は、COUNT(列名)と、対象の列名を指定して書きます
SELECT COUNT (NULL値) FROM ギニュー特戦隊;
結果は『3』と表示されます
SUM関数
合計を求める時にはSUM関数を使用します
SELECT SUM (戦闘力) FROM ギニュー特戦隊;
戦闘力の列の合計値の結果が表示されます
SELECT SUM (戦闘力), SUM (NULL値) FROM ギニュー特戦隊;
この結果は戦闘力の合計値とNULL値の合計値の440になります
単純に100+300+40の式です
COUNT関数以外の集約関数ではNULL値は除外されます
AVG関数
AVGとはaverageで平均値のことですね!
書き方はSUM関数と一緒です
MAX/MIN関数
行の最大値と最小値を表示させたい時にはMAX(最大)、MIN(最小)関数を使います
SUM,AVG関数は数字型にしか使用できませんが、MAX/MIN関数はほとんどの型データに使用できます
日付のデータのMAX関数は最新のデータ、MIN関数は1番過去のデータを取得します
文字列のデータでは、1番短い文字列がMINで1番長い文字列がMAXになるという訳です
特定のキーワードの種類数を知りたい時
type列から種類を取得して『3』種類(バランス、スピード、スキル)のデータを取得したい時には、DISTINCTを使用します
SELECT COUNT (DISTINCT 戦闘力) FROM ギニュー特戦隊;
COUNT (DISTINCT 列名)で重複値を除外した結果を、ここでは『3』を結果として表示してくれます
DISTINCTは他の関数にも使用できます
SELECT SUM ( ○○), SUM (DISTINCT ○○) FROM ギニュー特戦隊;
この場合では、SUM (○○)は単純に合計値です
SUM (DISTINCT ○○)は、重複したデータは1つのデータとしてカウントされるので、SUM (○○)の結果より少なく表示されます
例えば、1、2、3、3のデータとします SUMは9ですね でも、DISTINCTを使うと3は1回しかカウントされずに1+2+3で6の結果になります
テーブルをグループ化
テーブルを「〜ごと」「〜単位」などグループに切り分けて集約する関数があります
「〜にグループ化分けをする」
SELECT <列名1>,<列名2>,<列名3>... FROM <テーブル名> GROUP BY <列名1>,<列名2>,<列名3>...
GROUP BY句を使うと複数のグループに分れるようになります
SELECT type,COUNT * FROM ギニュー特戦隊 GROUP BY type;
結果はバランス3、スピード1、スキル1と表示されます
イメージとしてはこのようにグループに切り分けられてます
グループ化にすればそれぞれでSUM関数などが使用できるようになります
GROUP BY句に指定する列を「集約キー」「グループ化列」といいます
FROM句の後ろに記述
SELECT→FROM→WHERE→GROUP BY
NULLが含まれる場合でも『NULL』というグループが作られる
WHERE句を含んだ挙動
SELECT <列名1>,<列名2>,<列名3>... FROM <テーブル名> WHERE GROUP BY <列名1>,<列名2>,<列名3>...
WHERE句でtypeを絞り込むの場合の結果はこうなります
SELECT 戦闘力 COUNT(*) FROM ギニュー特戦隊 WHERE type = 'バランス' GROUP BY 戦闘力
FROM→→WHERE→GROUP BY→SELECT
書く順番と実行される順番は違うのでここら辺はしっかり把握しときたいポイントです!
GPOUP BY句で集約する列以外はSELECT句で使用不可
SELECT句でASを使用たものはGPOUP BY句では使用不可
GPOUP BY句を使っての結果順序はランダムなのでSELECT文で順番を指定しておく
集約関数の記述はSELECT句とHAVING句のみ
新しくHAVING句というのが出てきましたが、これについては次の記事で詳しく説明したいと思います!