データを抽出する際に数値を計算してから抽出したい場合は多くあります。今回は頻出集計関数について紹介します。
集計関数について
testsテーブル
| Id | name | english | math |
| 1 | 山田 | 80 | 50 |
| 2 | 田中 | 90 | 80 |
| 3 | 佐藤 | 70 | 100 |
合計
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 テーブル
| name | club_flag | gender |
| 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;上記のような複数条件を持った集計表を出す集計方法のことを、クロス集計といいます。
エンジニアからのアドバイス
数値を抽出する際に集計関数は頻繁に用いれらます。構文が複雑になってくると条件句などに惑わされることもあるかと思いますが、基本を思い出して抽出したいものを明確にしながら記載しましょう。
