SQLのCOUNTで数を数える!基礎から応用まで詳しく解説

  • 2024.08.06
       
【SQL】COUNT関数でレコード数を数えよう!

SQLのCOUNTはDBのレコード件数を数える際に用いる頻出の関数ですが、COUNT()の括弧の中で何を指定すべきなのか、NULLの扱い、重複の処理など細かく考えるとよく知らない…ということもあるかもしれません。今回は、そんなSQLのCOUNT関数について細かく解説していきます。

COUNTとは

SQLのCOUNTとは集計関数の1つで、指定したカラムのレコード件数を数える関数です。また、応用すれば重複したレコードを除いたレコード数やグループごとのレコード数、条件を指定したレコード数も調べられます。

COUNT関数の基本

先ほど、COUNT関数を指定したカラムのレコード件数を数える関数といいましたが、COUNT関数単体で使うことはなく、基本的には「SELECT」句でその結果を抽出する際に用いられます。

COUNT関数の基本構文

【基本構文】

SELECT COUNT(*) FROM テーブル名;

カッコの中身

カッコの中身をなににするかで抽出結果が変わります。

カッコの中身
*NULLを含めたレコード数
カラム名NULLを除いたレコード数
1NULLを含めたレコード件数
DISTINCT カラム名NULLと重複を除いたレコード件数

COUNT(*)とCOUNT(1)の違い

COUNT(*)はテーブル全体のデータ読み込みを行います。レコードそのものの数を数えるのでNULL値もその対象になります。その点、COUNT(カラム名)はそのカラムに有効な値が格納されているレコードだけが計算の対象になります。COUNT(1)は値が存在するレコードを計算します。そのため、COUNT(*)と同じ結果になります。1としていますが、0でも2でも結果は同じです。

集計関数とは

集計関数とは、指定したカラムの合計値や平均値を求めたり、あるいはCOUNT関数のようにデータ件数を取得するなど、その名の通り集計を行う関数を指します。これらを利用することで都度計算する必要がなくなり、データ分析などに使うと便利です。後ほど詳しく紹介しますが、集計関数とそれぞれの用途を以下の表に示しました。

集計関数用途
COUNT項目のデータ件数を取得する
SUM項目のデータ合計値を取得する
AVG項目のデータ平均値を取得する
MAX項目のデータ最大値を取得する
MIN項目のデータ最小値を取得する

また、集計関数を使う場合、併せて使うとより便利な「GROUP BY句」も後ほど紹介します。

COUNT関数の使い方

基本がわかったところで、ここからは本格的に使い方を説明します。

サンプルテーブル

「COUNT」関数の具体的な使い方を解説していくにあたり、サンプルとして「試験(test)」テーブルを用意しました。

「試験(test)」テーブル

ID(id)名前(name)試験地(location)点数(point)
1TanakaTokyo100
2YamadaTokyo80
3SatoNagoya85
4SuzukiOsaka90
5TakahashiOsakaNULL
6InoueFukuoka90

レコード数の取得

【使用イメージ】

SELECT COUNT(*) FROM テーブル名

SELECT文で用いると、選択されたテーブルのレコードの件数を返します。引数に「*(アスタリスク)」を指定すると、総レコード数を取得できます。

【実行コード】

SELECT COUNT(*) FROM test;

【実行結果】

(列名なし)
6

ちなみに、上記は「(列名なし)」となっていますが、列名を付けこともでき、その場合はAS句を使います。次のサンプルコードで使ってみます。

NULLを含まないレコード数の取得

【使用イメージ】

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

COUNT関数の引数にアスタリスクではなく、列名を指定する場合、その列の値のうち、NULL値を除いたレコード数を取得できます。

【実行コード】

SELECT COUNT(point) AS 受験人数 FROM test;

【実行結果】

受験人数
5

【まとめ】count(*)とcount(列名)の違い

データにNULL値が含まれていた場合は、COUNTの引数をアスタリスクにするのか列名にするかでデータ件数が変わります。

*(アスタリスク)指定したカラムのレコード数
列名指定したカラムのうち、値がNULLであるものを除いたレコード数

【実行コード】

SELECT COUNT(*) AS アスタリスク, COUNT(point) AS 列名 FROM test;

【実行結果】

アスタリスク列名
65

あなたのご希望に沿った案件が必ず見つかります
【フリーランス向け】高収入好待遇の案件をご紹介

TECH MANIA フリーランス

≫まずは簡単60秒で無料お問い合わせから≪

重複を除いたレコード数の取得

【使用イメージ】

SELECT COUNT(DISTINCT 列名) FROM テーブル名

COUNT関数の引数にDISTINCT句を使うと重複した値を1つにまとめたレコード数を取得できます。

【実行コード】

SELECT COUNT(DISTINCT location) AS 会場数 FROM test;

上記のコマンドで重複を排除した試験地の数、つまり試験会場の総数が求められます。

【実行結果】

会場数
4

試験テーブルの試験地列の重複データが取り除かれ、結果が4件になっています。

DISTINCTを指定した列にNULL値を含んでいる場合は?

DISTINCTを指定した列にNULL値を含んでいる場合は、試験テーブルの試験地列にNULLのデータを設定します。

【実行コード】

SELECT COUNT(DISTINCT location) AS 会場数 FROM test;

【実行結果】

会場数
3

結果は3となりました。NULLが除外された上で重複を1つにまとめたデータ数がわかります。

グループ単位でのレコード数の取得

【使用イメージ】

SELECT カラム名,COUNT(*) FROM テーブル名 GROUP BY カラム名

COUNT関数と、データをグループ化するGROUP BYを組み合わせて使うことで、グループごとのレコード数を集計できます。

【実行コード】

SELECT location AS 試験地,COUNT(*) AS 受験者数 FROM test GROUP BY location;

【実行結果】

試験地受験者数
Tokyo2
Nagoya1
Osaka2
Fukuoka1

試験地ごとの受験者数が求められました。このように、GROUP BY句で同じ値を持つデータごとのレコード数を求めることができ、データ分析にも応用することができます。

こちらもアスタリスクを指定するとNULL値もデータ件数に含まれるので、NULLを除外する場合は列名を指定する必要があります。

条件を指定したレコード数の取得

【使用イメージ】

SELECT COUNT(*) FROM テーブル名 WHERE 条件

WHERE句は、特定の条件を満たすデータのみを抽出するコマンドです。COUNT関数とWHERE句を組み合わせることで特定の条件を満たすデータ数を集計できます。

【試験テーブル】

ID名前試験地点数
1TanakaTokyo100
2YamadaTokyo80
3SatoNagoya85
4SuzukiOsaka90
5TakahashiOsakaNULL
6InoueFukuoka90

【実行コード】

SELECT COUNT(*) AS 受験者数 FROM test WHERE location='Tokyo';

試験テーブルで試験地がTokyoのレコード数を求めます。

【実行結果】

受験者数
2

【実行コード2】

SELECT COUNT(*) AS 90点以上の得点者数 FROM test WHERE point>= 90;

【実行結果】

90点以上の得点者数
3

COUNT以外の集計関数

平均値を求める「AVG」

平均値を求めるにはAVG関数を使います。

【使用イメージ】

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

【実行コード】

SELECT AVG(point) AS 平均得点 FROM test;

【実行結果】

平均得点
89

合計値を求める「SUM」

合計値を求めるにはAVG関数を使います。

【使用イメージ】

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

【実行コード】

SELECT SUM(point) AS 合計得点 FROM test;

【実行結果】

合計得点
445

最大値を求める「MAX」

最大値を求めるにはAVG関数を使います。

【使用イメージ】

SELECT MAX(カラム名) from テーブル名

【実行コード】

SELECT MAX(point) AS 最高得点 FROM test;

【実行結果】

最高得点
100

最小値を求める「MIN」

最小値を求めるにはAVG関数を使います。

【使用イメージ】

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

【実行コード】

SELECT MIN(point) AS 最低得点 FROM test;

【実行結果】

最低得点
80

SQL関連記事

SQLの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事