今回は集計とグループ化について説明していきたいと思います!!
過去の関連投稿
「SQLの基礎について学ぶ#01」
「SQLの基礎について学ぶ#02」
「SQLの基礎について学ぶ#03」
「SQLの基礎について学ぶ#04」
「SQLの基礎について学ぶ#05」
「SQLの基礎について学ぶ#06」
1. 代表的な集計関数
関数名 | 説 明 |
---|---|
SUM | 各行の値の合計値を求める |
MAX | 各行の値の最大値を求める |
MIN | 各行の値の最小値を求める |
AVG | 各行の値の平均値を求める |
COUNT | 行数をカウントする |
accountテーブル
date(日付) | name(項目名) | price(金額) |
---|---|---|
2020-12-03 | 食費 | 800 |
2021-01-03 | 交通費 | 600 |
2021-05-22 | 食費 | 1000 |
2021-03-14 | 日用品 | 1400 |
① さまざまな集計関数
SELECT
SUM(price) AS total
MAX(price) AS maximum
MIN(price) AS minimum
AVG(price) AS average
FROM account
結果
total | maximum | minimum | average |
---|---|---|---|
3800 | 1400 | 600 | 950 |
② 行数を集計関数
COUNT(*)
=> 検索結果の行数
COUNT(列名)
=> 検索結果の指定列に対する行数
SELECT COUNT(*) AS '食費の桁数'
FROM account
WHERE name = '食費'
結果
食費の桁数 |
---|
2 |
③ COUNT(*)とCOUNT(列名)の違い
・COUNT(*)
は、行数をカウントする(NULLもカウント)。
・COUNT(列名)
は指定した列がNULLである行を無視してカウントする。
2. 集計関数に関する注意点
① 集計関数は、SELECT文
の選択列リストかORDER BY句
またはHAVING句
にのみ記述できる。
② 引数に渡せる型が異なる
関数名 | 数値型 | 文字列型 | 日付型 |
---|---|---|---|
SUM | 各数値の合計 | ✖ | ✖ |
MAX | 各数値の最大 | 検索結果の最後の文字列 | 最も新しい日付 |
MIN | 各数値の最小 | 索結果の最初の文字列 | 最も古い日付 |
AVG | 各数値の平均 | ✖ | ✖ |
COUNT | 行数 | 行数 | 行数 |
3. データのグループ化
グループ化は指定いた基準で検索結果をいくつかのまとまりに分ける機能です。
accountテーブル
date(日付) | name(項目名) | price(金額) |
---|---|---|
2020-12-03 | 食費 | 800 |
2021-01-03 | 交通費 | 600 |
2021-05-22 | 食費 | 1000 |
2021-03-14 | 日用品 | 1400 |
2020-12-03 | 食費 | 700 |
2021-01-03 | 交通費 | 1200 |
2021-05-22 | 交通費 | 1000 |
2021-03-14 | 日用品 | 400 |
① グループ化して集計する構文
SELECT グループ化の基準列名, 集計関数
FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名
SELECT name, SUM(price) AS price_total
FROM account
GROUP BY name
結果
name | price_total |
---|---|
食費 | 2500 |
交通費 | 2800 |
日用品 | 1800 |
ポイント
・グループ化するには、GROUP BY句
で基準となる列を指定
・集計関数によって、データ値をグループ毎
にまとめて計算
・結果の行数は、グループの数(今回はname)と一致
・WHERE句を処理する段階では、まだ集計していないため、集計関数はWHERE句を利用することはできない
。集計処理を行った後に結果表に対して、絞り込みを行う場合はHAVING句
を用いる。
② グループ化してから絞り込む構文
HAVING句
に用いる条件式はWHERE句に用いる条件式に似ています。AND
やOR
を用いることができます。ただし、両者の絞り込みを行うタイミングが異なります
。
基本構文
SELECT グループ化の基準列名, 集計関数
FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名
HAVING 集計結果にに対する絞り込み条件
金額の合計値が2000円以上のものに絞り込む
SELECT name, SUM(price) AS price_total
FROM account
GROUP BY name
HAVING SUM >= 2000 /* 合計値が2000円以上のものに絞り込む */
結果
name | price_total |
---|---|
食費 | 2500 |
交通費 | 2800 |
3. まとめ
今回は以上になります。何か間違い等ありましたら、コメントお願いします。引き続きSQLについて学んでいきたいと思います。