0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLの基礎について学ぶ#07

Last updated at Posted at 2021-01-14

今回は集計グループ化について説明していきたいと思います!!

過去の関連投稿

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句に用いる条件式に似ています。ANDORを用いることができます。ただし、両者の絞り込みを行うタイミングが異なります

基本構文

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について学んでいきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?