PR

【SQL】COUNT関数を1分でわかりやすく解説

Database

SQLを利用してテーブルのレコード数を調べたいときに便利なCOUNT関数について初心者向けにわかりやすく1分で解説します。

参考 SQLとは?

SELECT COUNT(対象カラム)
FROM テーブル名
WHERE 条件(任意);

COUNT関数は指定したテーブル/カラムに存在するレコード数を返してくれます。

count関数のイメージ
図1:count関数のイメージ

DISTINCTキーワードGROUP BYキーワードと同時に利用したりすると、できることがたくさん増えるので理解必須の基本知識です。

このページではCOUNT関数の構文ルール / 利用する際の注意点を初心者でも理解できるように1分で解説します。

このページで学べる内容
  • COUNT関数の使い方/構文ルール
  • COUNT関数の注意点:NULLのカウントについて
  • Tips:DISTINCTキーワードとの合わせ技

プログラマー/システムエンジニアを目指す方であれば知らないと恥ずかしい超・重要知識です。是非最後までご覧ください。

参考 【初心者向け】SQLの基本構文ルール

スポンサーリンク

SQL:COUNT関数の基本

COUNT関数の基本構文ルールは以下の通り。

SELECT COUNT(対象カラム)
FROM テーブル名
WHERE 条件(任意);

レコード数をカウントしたいカラム名を "COUNT" で囲んであげるだけの簡単な構文です。もしくは、カラムを指定せずに *(アスタリスク)でテーブルのレコード数をシンプルに取得することも可能。

以下のテーブルに含まれるレコード数をカウントしてみます。

SELECT COUNT(*)
FROM MemberList;

-- 結果「8」

結果は「8」となります。レコード数が8個あるので、その結果が返ってきてくるということ。

カラムを指定してCOUNT関数を利用する

先ほどは COUNT(*) のようにカラムを指定せずに単純にレコード数をカウントしました。

SELECT COUNT(*)
FROM MemberList;
--カラムを指定せずにレコード数をカウント

ですが、例えば Department カラムではNULL値が2行含まれており、このNULLを除外したレコード件数をカウントしたいような場合も存在します。

この場合は、Departmentカラムを以下のように指定してカウントすることで実現することができます。

SELECT COUNT(Department)
FROM MemberList;
--カラム "Department" を指定してカウント

この場合、NULL値がカウントされないので、結果は「6」となります。

COUNT関数の注意点

COUNT関数の大きな注意点がこのNULLのカウント方法にあります。

例えば、以下のテーブルをカラムを指定せずにカウントしてみます。

すべてのカラムがNULL
SELECT COUNT(*) FROM MemberList;
--カラムを指定せずにレコード数をカウント

普通に考えるとどのカラムもNULLなので、結果は0となりそうですが、実はこのSQLを実行すると「8」が返って来ます。

これは、COUNT関数が以下のような性質を持っていることが理由です。

COUNT関数の仕組み
  • COUNT(*)NULLも含めてレコード数をカウントする
  • COUNT(カラム名) はNULLを除外してレコード数をカウントする

つまり、以下のSQLを実行した場合は「8」と「0」が取得されるということ。

SELECT COUNT(*), COUNT(Department)
  FROM MemberList;

--COUNT(*)⇒8  /  COUNT(Department)⇒0

以上がCOUNT関数の大きな注意点です。SQL初心者にとって陥りがちな罠の1つですので、しっかりと押さえておきましょう。

Tips:DISTINCTキーワードとの合わせ技

COUNT関数はDISTINCTと組み合わせて利用することも可能です。

SELECT COUNT(DISTINCT Department)
FROM MemberList;

-- 結果「3」
-- Department列の重複を削除してカウント

Department列には「総務部」「財務部」「営業部」の3つの重複しないレコードが存在するため、結果は3となります。

先ほど解説した通り、COUNT(カラム名) とした場合はNULLを除外するので4では返って来ません。

利用するDBMSによっては COUNT(DISTINCT カラム名) の構文が許容されていない場合もあります。その場合は、以下のようにDISTINCTをサブクエリとして利用することで同様の処理を実現することができます。

SELECT COUNT(*)
FROM (SELECT DepartMent FROM MemberList );
このページのまとめ
  • COUNT関数はレコード件数を返す
  • COUNT(*)NULLも含めてレコード数をカウントする
  • COUNT(カラム名) はNULLを除外してレコード数をカウントする

より実践的なサンプルコード

-- テーブルの作成
CREATE TABLE students (
    id INT PRIMARY KEY,
    first_name VARCHAR(255),
    last_name VARCHAR(255),
    age INT
);

-- データの挿入
INSERT INTO students (id, first_name, last_name, age)
VALUES (1, 'John', 'Doe', 20);

INSERT INTO students (id, first_name, last_name, age)
VALUES (2, 'Jane', 'Smith', NULL);

INSERT INTO students (id, first_name, last_name, age)
VALUES (3, 'Bob', 'Johnson', 22);

INSERT INTO students (id, first_name, last_name, age)
VALUES (4, 'Alice', 'Martin', 24);

-- SELECT COUNT
SELECT COUNT(*) FROM students;

/* 結果
4
*/

--age 列を指定してカウント
SELECT COUNT(age) FROM students;

/* 結果
3

COUNT(age)はageカラムのNULL値を除外してレコード数をカウントします。
このサンプルコードでは1つのレコードにNULL値が含まれているため、
カウントは4から1つ減って3になります。
*/

参考 CREATE TABLE / INSERT

現在のスキルに今一つ満足できていないシステムエンジニア/プログラマーの方へ。

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。是非この機会にブックマークを!

読者料典 【完全無料】SQL:初心者向け学習ロードマップ ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました