カテゴリ: PostgreSQL 更新日: 2026/03/13

PostgreSQLのCOUNT完全解説!COUNT(*)とCOUNT(column)の違いを初心者向けにやさしく理解

PostgreSQLでCOUNT(*)とCOUNT(column)の違い
PostgreSQLでCOUNT(*)とCOUNT(column)の違い

先生と生徒の会話形式で理解しよう

生徒

「データの数を数えたいときにCOUNTを使うって聞いたんですが、書き方がいくつもあって混乱します」

先生

「COUNT(*)とCOUNT(列名)の違いですね。実はここがSQL初心者さんがつまずきやすいポイントなんです」

生徒

「パソコンもあまり触ったことがないんですが、大丈夫でしょうか?」

先生

「大丈夫です。名簿を数える感覚で、一つずつ丁寧に見ていきましょう」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースという「たくさんの情報を整理して保管している箱」に指示を出すための言葉です。学校の名簿や会員リストのような表を、探したり、並べたり、数えたりする作業を、パソコンにお願いするために使います。文字で命令を書くことで、コンピュータが代わりに作業してくれます。

2. PostgreSQLと集約関数の基本

2. PostgreSQLと集約関数の基本
2. PostgreSQLと集約関数の基本

PostgreSQLは、世界中で使われているデータベースソフトです。その中には「集約関数」という便利な仕組みがあります。集約関数とは、たくさんのデータをまとめて計算する機能です。合計を出したり、平均を出したり、そして「件数を数える」こともできます。

COUNTは、その中でも特に使用頻度が高い集約関数です。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 22  | jiro@example.com
5  | 伊藤美咲   | 27  | 

3. COUNT(*)とは何を数えているのか

3. COUNT(*)とは何を数えているのか
3. COUNT(*)とは何を数えているのか

COUNT(*)は「行の数」を数える命令です。表の中に何行データがあるかを、そのまま数えてくれます。空欄があっても関係ありません。名簿に何人名前が書いてあるかを数えるイメージです。


SELECT COUNT(*)
FROM users;

count
-----
5

この結果は「usersテーブルには5件のデータがある」という意味になります。年齢やメールアドレスが空でも、1行としてカウントされます。

4. COUNT(column)とは何を数えているのか

4. COUNT(column)とは何を数えているのか
4. COUNT(column)とは何を数えているのか

COUNT(column)は、指定した列に「値が入っている行」だけを数えます。ここがCOUNT(*)との大きな違いです。SQLでは、値が入っていない状態をNULLと呼びます。COUNT(column)は、このNULLを数えません。


SELECT COUNT(email)
FROM users;

count
-----
4

メールアドレスが入っていない行が1件あるため、COUNT(*)より少ない数になります。これは「メールアドレスが登録されている人数」を知りたいときに役立ちます。

5. COUNT(*)とCOUNT(column)の違いを例えで理解

5. COUNT(*)とCOUNT(column)の違いを例えで理解
5. COUNT(*)とCOUNT(column)の違いを例えで理解

この違いを紙の名簿で例えてみましょう。クラス名簿に5人分の行がある場合、COUNT(*)は「5人います」と答えます。一方で、メールアドレス欄が空白の人が1人いると、COUNT(email)は「メールを書いている人は4人です」と答えます。

つまり、COUNT(*)は行の存在そのものを数え、COUNT(column)は「中身があるかどうか」を見て数えているのです。

6. GROUP BYとCOUNTの組み合わせ

6. GROUP BYとCOUNTの組み合わせ
6. GROUP BYとCOUNTの組み合わせ

COUNTはGROUP BYと一緒に使うことで、グループごとの件数を数えられます。GROUP BYは「同じ値ごとにまとめる」命令です。年齢ごとに何人いるか、といった集計ができます。


SELECT age, COUNT(*)
FROM users
GROUP BY age;

age | count
----+------
19  | 1
22  | 1
25  | 1
27  | 1
30  | 1

このように、同じ年齢の人が何人いるかを簡単に確認できます。

7. COUNT(column)とGROUP BYの注意点

7. COUNT(column)とGROUP BYの注意点
7. COUNT(column)とGROUP BYの注意点

GROUP BYとCOUNT(column)を組み合わせる場合も、NULLは数えられません。たとえば「年齢ごとのメール登録人数」を調べる場合、メールが未登録の人は集計から外れます。これは間違いではなく、COUNT(column)の正しい動作です。


SELECT age, COUNT(email)
FROM users
GROUP BY age;

8. 初心者が覚えておきたい使い分けの考え方

8. 初心者が覚えておきたい使い分けの考え方
8. 初心者が覚えておきたい使い分けの考え方

COUNT(*)とCOUNT(column)は、どちらが良い悪いではありません。「何を数えたいか」で使い分けます。全体の件数を知りたいならCOUNT(*)、特定の項目が入力されている件数を知りたいならCOUNT(column)を使います。目的を先に考えることが、SQLを正しく使う近道です。

カテゴリの一覧へ
新着記事
New1
MySQL
【MySQL入門】LIMITとは何か?SELECT文で取得件数を制限する方法を初心者向けに徹底解説
New2
PostgreSQL
PostgreSQLのMAX・MIN完全解説|集約関数とGROUP BYで最大値・最小値を抽出する方法
New3
MySQL
MySQLのORDER BYで文字列を並び替える方法と注意点を徹底解説|SQL初心者向け完全ガイド
New4
PostgreSQL
PostgreSQLのSUM・AVG完全解説|集約関数とGROUP BYの計算時の注意点を初心者向けにやさしく説明
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)