C200 集計(合計・平均・最大・最小・クロス集計)

データを抽出する際に数値を計算してから抽出したい場合は多くあります。今回は頻出集計関数について紹介します。

集計関数について

testsテーブル

Idnameenglishmath
1山田8050
2田中9080
3佐藤70100

合計

SUM()関数を用いることで合計を抽出することができます。合計を取得する際にNULL値を除外して計算します。

SQL
SELECT
  sum(カラム名)
FROM
  テーブル名

下記のように記載することで、3名の英語の合計点を抽出することができます。

SQL
SELECT
  sum(english)
FROM
  tests

抽出結果

SQL
240

平均

average()関数を用いることで合計を抽出することができます。

SQL
SELECT
  average(カラム名)
FROM
  テーブル名

下記のように記載することで、3名の英語の平均点を抽出することができます。

SQL
SELECT
  average(english)
FROM
  tests

抽出結果

SQL
80

最大

max()関数を用いることで合計を抽出することができます。

SQL
SELECT
  max(カラム名)
FROM
  テーブル名

下記のように記載することで、3名の中で英語の最高点を抽出することができます。

SQL
90

抽出結果

最小

min()関数を用いることで合計を抽出することができます。

SQL
SELECT 
  min(カラム名)
FROM
  テーブル名

下記のように記載することで、3名の中で英語の最低点を抽出することができます。

抽出結果

SQL
70

クロス集計

クロス集計とは、与えられたデータの中から複数個の項目を抽出して、データ分析や集計を行う手法のことをいいます。具体的にはcase構文とgroup by句を用いて行うことが一般的です。

下記の様に記載することでクロス集計を用いてデータの集計・抽出を行うことができます。

peoples テーブル

nameclub_flaggender
Aさん部活にはいっていないm
Bさん運動部m
Cさん文化部f
Dさん運動部f
Eさん部活にはいっていないf
Fさん運動部m
PHP
SELECT
  club_flag,
  SUM(CASE gender WHEN 'm' THEN 1 ELSE 0 END) AS male,
  SUM(CASE gender WHEN 'f' THEN 1 ELSE 0 END) AS female,
  count(gender) as '合計'
FROM
  peoples
GROUP BY
  club_flag;

上記のような複数条件を持った集計表を出す集計方法のことを、クロス集計といいます。

エンジニアからのアドバイス

数値を抽出する際に集計関数は頻繁に用いれらます。構文が複雑になってくると条件句などに惑わされることもあるかと思いますが、基本を思い出して抽出したいものを明確にしながら記載しましょう。

---