前回
4. テーブルの集約と検索
- テーブルの列の合計値や平均値などの集計を行うには集約関数を用いる。
- 集約関数は基本的に
を除外して集計する。ただし
関数は
とすれば
を除外した全行数を数える。
- 重複値を除外して集計するには
キーワードを用いる。
4.1 集約関数
でデータに対して何らかの操作や計算を行うには関数を用いる。差し当たり5つを紹介する:
テーブルのレコード数(行数)を数える。 | ||
テーブルの数値列のデータを合計する。 | ||
テーブルの数値列のデータの平均を取る。 | ||
テーブルの任意の列のデータの最大値を取る。 | ||
テーブルの任意の列のデータの最小値を取る。 |
このような集計用の関数を集約関数または集合関数と呼ぶ。
-- COUNT関数の使い方1:全行を数える SELECT COUNT(*) FROM <テーブル名> -- COUNT関数の使い方2:特定列についてNULLを除外して行数を数える SELECT COUNT(列名) FROM <テーブル名> -- COUNT関数の使い方3:重複値を除外して行数を数える SELECT COUNT(DISTINCT 列名) FROM <テーブル名> -- SUM関数:NULLは自動的に除外 SELECT SUM(列名) FROM <テーブル名> -- AVG関数:NULLは自動的に除外 SELECT AVG(列名) FROM <テーブル名> -- MAX関数:NULLは自動的に除外 SELECT MAX(列名) FROM <テーブル名> -- MIN関数:NULLは自動的に除外 SELECT MIN(列名) FROM <テーブル名>
4.2 テーブルの切り分け
- 集約関数と
句を併用することでテーブルを指定して列ごとに切り分けて集約できる。
- 集約キーに
が含まれる場合、集約結果にも「不明」行として現れる。
- 集約関数と
句を併用する場合、4点の注意事項がある: ①
句に書けるものは限定されている ②
句には
句で付けた列の別名は使えない。 ③
句は集約結果をソートしない ④
句に集約関数を書くことはできない
4.2.1 GROUP BY
句でグループごとに操作を行うことができる。
句は必ず
句(
句があればそれ)よりも後ろに置くというルールになっている。
集計に当たってはも1つの値と見なされる。
-- GROUP BY句による集計 SELECT <列名1>,<列名2>,… FROM <テーブル名> GROUP BY <列名1>,<列名2>,… -- GROUP BY句による集計例:ある列の値について個数を数える SELECT A1,COUNT(*) FROM <テーブル名> GROUP BY A1
4.2.2 WHERE句を使った場合のGROUP BYの動作
句に
句を併用した場合、まずは
句で指定した条件でレコードが絞り込まれた後に
句により集約が行われる。
4.2.3 GROUP BY句を用いるときの注意
- 集約関数を用いるときは①定数、②集約関数、③
句で指定した列名*1しか
句に書けない
句では
句で
を用いて指定した名称は利用できない
句は結果の順序をソートしない
- 集約関数は
句または
句以外ではエラーになる
*1:集約キーという。