RDBMS:検索結果の集約と並び替え

下記のようなテーブルからデータを選択したい時に使用するのが、SELECT文だった。 image.png

今回は、さらにテーブルデータを集約したり、並び替えなどをする方法について学んだ。

集約関数

テーブルのデータを集計したりする際に用いるのが集約関数(または集合関数)。とりあえず、COUNT,SUM,AVG,MAX,MINの5つを覚えておけば、ひとまず良いみたい。

COUNT:テーブルのレコード数(行数)を数える

  • コマンド:SELECT COUNT(引数) FROM テーブル名;
  • 実行例:image.png 引数が*の場合はNULLもカウントされるが、列を限定するとNULLは除外してカウントされる。

SUM:合計値を求める

  • コマンド:SELECT SUM(引数) FROM テーブル名;
  • 実行例:image.png SUMの対象列にNULLがあった場合は、当該データを除外した上で結果が返される。

AVG:平均値を求める

  • コマンド:SELECT AVG(引数) FROM テーブル名;
  • 実行例:image.png SUMの対象列にNULLがあった場合は、当該データを除外した上で結果が返される。 具体的には、hanbai_tankaを例にすると、下記の計算がされているということ。 sql SUM(shiire_tanka)/COUNT(shiire_tanka) -- 2035.0(12210/6)

    NULLを値0とみなして、計算させる方法もあるが、第六章で学ぶ。

MAX,MIN:最大値・最小値を求める

  • コマンド(MAX):SELECT MAX(引数) FROM テーブル名;
  • コマンド(MIN):SELECT MIN(引数) FROM テーブル名;
  • 実行例:image.png

重複値を除外して集約関数を用いる

  • コマンド:SELECT 集約関数(DISTINCT キーワード) FROM テーブル名
  • 実行例:image.png

GROUP BY:グループに分ける

  • コマンド:SELECT カラム名 FROM テーブル名 GROUP BY 集約キー(グループ化列)
  • 実行例1:image.png
  • 実行例2:WHERE句を使う image.png

HAVING:集約結果に条件を指定する

WHEREとの違いは下記。

句名 説明
WHERE 行に対する条件指定
HAVING グループに対する条件指定

要はグループ分けした後のものに対して条件指定をしたい場合は、HAVINGを用いると覚えておけば良さそう。よってHAVINGGROUP BYの後ろに記述する。

  • コマンド:SELECT カラム名 FROM テーブル名 GROUP BY カラム名 HAVING 条件
  • 実行例:image.png

ORDER BY:並び替え

ORDER BY句はSELECT文の最後に書く。昇降については、キーワードを設定する。昇順はASC、降順はDESCというキーワードを設定する。省略した場合は、実務的には昇順の使用率が高いと言う理由から、暗黙的に昇順になる。

  • コマンド:SELECT カラム名 FROM テーブル名 ORDER BY 基準列
  • 実行例1:降順image.png
  • 実行例2:複数ソートキーを設定image.png
  • 実行例3:別名を使うimage.png

参考