SQL

SQLでテーブルのデータを集計してみよう

0

これまでは、4つのSQL文を使ったデータの取得・WHERE句による行の絞り込み・検索結果の加工をしてきたが、集計関数を使ってSELECT文で取得したデータを「集計」することもできる。

集計関数

よく使われる集計関数

集計関数は基本的にはSELECT文で使われる。よく使う集計関数は下記の通り

関数 役割
SUM 各行の合計を求める
MAX 各行の最大値を求める
MIN 各行の最小値を求める
AVG 各行の平均を求める
COUNT 行数を求める

実際に使うとこんな感じ

取得してきた値はこんな感じで取得できる

合計 最高額 最低額 平均額
15740 7560 0 3148

COUNT関数はこんな感じ

はじめてのSQL③(検索結果の加工)で出てきたDISTINCTを使うと、重複している値を除外して集計できる。

NULLの扱いについて

集計関数によって、NULLの扱い方が違う。

集計関数 NULLの扱い方 全行がNULLの場合
SUM NULLは無視 NULLを返す
MAX NULLは無視 NULLを返す
MIN NULLは無視 NULLを返す
AVG NULLは無視 NULLを返す
COUNT(列名) NULLは無視 0
COUNT(*) NULLも含めてカウント NULLも含めた行数

NULLは無視されることが多いが、平均額等(合計金額÷使った回数)を求めるときは金額がNULLであっても使った回数にカウントしないと計算ができないので、COALESCE関数を使う。

グループ集計

GROUP BY句

GROUP BY句は項目別に集計したいときに便利

イメージはこんな感じ

GROUP BY句は複数の列を指定することもできる。以下はMySQLの例https://dev.mysql.com/doc/refman/5.6/ja/group-by-modifiers.html

HAVING句

集計結果に対して、絞り込みをしたいときはWHERE句ではなく、HAVING句を使う。
WHERE句はデータを検索する際に絞り込み、HAVING句は集計後データを絞り込む役割がある。

集計テーブル

将来的に何万件、何十万件といった大量のデータを扱う際は集計テーブルを作ると良いかもしれない。
簡単に言うと、集計したデータを別テーブルに保存(INSERT INTO)しておくことで、後で簡単に集計結果のデータを取り出すことができるから。
SELECT文や集計関数を使って毎回処理することもできるが、SQL文は基本的には一行ずつ処理をしていくから、行数が増えれば増えるほど、処理に時間がかかるし、負荷が大きくなりそう。

集計テーブルの難点としては、定期的に更新しておかないと、古い集計データを取得してしまうことになるので、分析結果がズレる可能性があるので、その点は注意しておくと良いかも。

0
ABOUT ME
chopes
前職では、人材業界で法人営業・キャリアアドバイザー・大阪責任者をしていました。他にも、新入社員の研修策定と育成、面談者の集客におけるスカウト業務や中途採用の面接官、新卒採用の2次選考官、インターンシップのメンターとしてプログラムに参加していました。退職後は、未経験でエンジニアになるためにスクールに通学して勉強。2ヶ月の転職活動を経て、今春からRailsエンジニアとして第二のキャリアを歩むことになりました。主に学習記録や未経験エンジニアについてアウトプットしていきたいと思います! 以下、Twitterアカウントですので、気軽にフォローしてください! Twitter:@chopesu_se