LoginSignup
1
1

More than 1 year has passed since last update.

【集約関数】#3 Webディレクター見習いが知識ゼロからSQLを学ぶ

Last updated at Posted at 2020-02-18

こんにちは、はじめまして!  saku-chanです!
このアカウントは、社会人1年目のWebディレクター見習い(初心者)がSQLを学ぶ成長記録になっています。
ひよっこから成長する過程を残し、ついでに皆さんからアドバイスを頂けたら良いな! 私と同じように知識ゼロからSQLを始める人の一つの指針になればいいな!という思いで作成しました。
ちなみに、ブログを含め記事などを書いた経験がないため読みづらい部分も多々あるかと思いますが、そこも含めて皆さまアドバイス頂けると嬉しいですmm

◆記事の内容は、SQL初心者の自分が、同じような初心者の方でも理解しやすいように心がけながら、SQLに関して学んだことを懇切丁寧に記載しています◆

目次

はじめに

今回はSQLで使用される集約関数に関して勉強したことを記載します!
前回同様、初めてSQLを勉強する方が気軽に読んでいただける記事になっています^^
ではスタート!

前回の記事【SELECT句とFROM句】はこちら

記事一覧

集約関数とは

そもそも集約関数ってなんでしょうか。

「合計」「平均」「最大値」「最小値」、、、etc

これで何となくイメージがついた方が多いのではないかと思います。(笑)

集約関数は、SQLにおいてテーブルの複数の行を対象に「合計」や「平均」など集計を行うために使用するものです。
エクセルの関数と似ているので、理解がしやすいかなと思います。

今回は、そんな集約関数の1つであるCOUNT関数をメインに、いくつかの集約関数を取り上げてみます!

COUNT関数

まずはCOUNT関数から説明していきます。

COUNT関数はテーブルのレコード数(行数)を数える集約関数です。

理解しやすいと思うので、具体例を出して説明します。

テーブル名:friends

id name age
01 けん 14
02 あおい 21
03 みほ 16

上記のようなfriendsというデータテーブル1があった時に、

 SELECT COUNT(*) FROM friends ;

このようなクエリ(命令)を実行すると、下記のような結果を得ることが出来ます。

COUNT(*)
3

つまり、このクエリの意味は、
friendsというテーブルのレコード数(行数)を全行数える
です。

ポイントとしては、集約関数はSELECT句に記載することくらいでしょうか。

覚えることが少なくてとっても簡単ですね!

①COUNT(*)

ではもう少しCOUNT関数に関してお話していきたいと思います。
実はCOUNT関数は上記で説明した使い方を含め3つ使用方法(呼び出し方)があります。

①COUNT(*)
②COUNT(<カラム名>)
③COUNT(DISTINCT <カラム名>)

似たり寄ったりでよくわからないと思うので、具体例を見ながら理解していきましょう!

今回使用するのはこちらのテーブルです。
テーブル名:friends_2

id name age color
01 けん 14 red
02 あおい 21 NULL
03 みほ 16 pink
04 さやか 9 green
05 たくや 16 NULL
06 あい 16 green

まずは①COUNT(*)をつかってみます。

 SELECT COUNT(*) FROM friends_2 ;

このクエリの実行結果は

COUNT(*)
6

となります。
先ほどと同じですね!
①COUNT(*)の意味は「テーブルのレコード数2全行数える」でした。

②COUNT(<カラム名>)

続いて②COUNT<カラム名>をつかってみます。

テーブル名:friends_2

id name age color
01 けん 14 red
02 あおい 21 NULL
03 みほ 16 pink
04 さやか 9 green
05 たくや 16 NULL
06 あい 16 green
 SELECT COUNT(id) FROM friends_2 ;

このクエリの実行結果は

COUNT(id)
6

あれ?先ほどと同じ結果になりました。
では下記のクエリだとどうでしょうか。

 SELECT COUNT(color) FROM friends_2 ;

このクエリの実行結果は

COUNT(color)
4

となります。
クエリ名を「id」から「color」にすると結果が6→4に変わりました。
この理由は、colorのカラムをよーく見てみるとわかります。

例えば2レコード目のcolorカラム。
NULL
と記載されています。

いや、NULLってなんやねん!
ってなった方。
ですよね!!気持ち分かります!!
データを扱ったことがある方ならあたりまえに知っていることのようですが、
そのあたりの知識もゼロである自分は、SQLの本を読んで初めてNULLに突然出会ったとき、思わず突っ込みました、、笑

NULLデータベース上でその箇所にデータがないということを表す表現です。
つまり、今回の例でいくと、2レコード目はidが02で、nameがあおいで、ageが21だということはわかるけど、colorはわからない、ということになります。

まとめると、②COUNT<カラム名>の意味は、「指定したカラムのNULLではないレコード数を数える」です。

③COUNT(DISTINCT <カラム名>)

最後に③COUNT(DISTINCT <カラム名>)をつかってみます。

テーブル名:friends_2

id name age color
01 けん 14 red
02 あおい 21 NULL
03 みほ 16 pink
04 さやか 9 green
05 たくや 16 NULL
06 あい 16 green
 SELECT COUNT(DISTINCT color) FROM friends_2 ;

このクエリの実行結果は

COUNT(color)
3

となります。
どういうことかというと、これは、値がNULLではないものについて、値の重複を除いたレコード数2を数えるという意味です。
(今回の例だとcolorカラムにはgreenが2つあるので、この重複を除いたred、pink、greenの「3」が表示されています。)

ここで勘が良い方は既にお気づきかもしれませんが、値の重複を除いたという部分をDISTINCTで指定しています。

なので、たとえば

 SELECT COUNT(DISTINCT age) FROM friends_2 ;

というクエリを実行した結果は、

COUNT(age)
4

になります。
16が重複しているので、14、21、9、16を数えた「4」が表示されているということですね。

ちなみにDISTINCTは集計関数でなくても使うことが可能です。

 SELECT DISTINCT age FROM friends_2 ;

このクエリの結果は、

age
14
21
16
9

となります。

COUNT関数まとめ

改めてCOUNT関数に関してまとめてみます。

①COUNT(*)
→テーブルのレコード数2を全行数える

②COUNT(<カラム名>)
→指定したカラムのNULLではないレコード数を数える

③COUNT(DISTINCT <カラム名>)
→値がNULLではないものについて、値の重複を除いたレコード数2を数える
(COUNT(DISTINCT <カラム名>)はログデータからユニークユーザー数(固有のユーザー数)を集計する時などによく使われるようです。)

一見わかりづらいかもしれませんが、順を追っていけば大したことは言っていないですね(笑)

その他の集約関数

最後にさくっとCOUNT関数以外の集約関数をご紹介します!

COUNT関数以外の主な集約関数はこのような感じです。

集約関数 内容
SUM(<カラム名>) 指定したカラムの合計
AVG(<カラム名>) 指定したカラムの平均
MAX(<カラム名>) 指定したカラムの最大値
MIN(<カラム名>) 指定したカラムの最小値

使い方はCOUNT関数と同じで、

 SELECT SUM(age) FROM friends_2 ;
 SELECT MAX(age) FROM friends_2 ;

のように使用できます。

1点注意点としては、COUNT関数と同様に他の集約関数でもNULLは無視されるということです。

たとえば、下記のようなテーブル、クエリが存在したとき、

Table名:quiz

points
2
NULL
4
0
NULL
 SELECT AVG(points) FROM quiz ;

結果はこのようになります。

AVG(points)
2

実行内容は、(2+4+0) ÷ 3です。

ここで注意しなければいけないのは、NULL0は違うということです。
0は集約関数の対象になるけれど、NULLは対象外となります。

今回の例でいくと、
クイズ大会において、NULLは不参加、0は参加したけど0ポイントだった時、
参加者の平均得点は2ポイント
という感じでしょうか。

このように少し注意は必要ですが、基本さえ覚えてしまえばあとは汎用的に使用できるので、さくっと覚えてしまいましょう!

まとめ

  • 集約関数は、SQLにおいてテーブルの複数の行を対象に集計を行うために使用する
  • COUNT関数はテーブルのレコード数(行数)を数える集約関数
  • NULLはデータベース上でその個所にデータがないということを表す表現
  • NULLは集約関数で集計する際、対象外になる
  • DISTINCTは値の重複を除くために使用する

最後に

今回はCOUNT関数をメインに、集約関数に関してまとめてみました!
SQLが初めてという方でも理解できるような内容になっていると嬉しいです。
ではまた次回!^^

次の記事【WHERE句】

記事一覧


  1. データが記載してある表 

  2. 行数 

1
1
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
1
1