SQLのCOUNTの基本的な使い方をマスターしよう!初心者向け完全ガイド

この記事のポイント

この記事では、データベースの件数を数えるSQL COUNT文について、プログラミング初心者の方にもわかりやすく解説していきます。

  • COUNT文の基本構文と基礎的な使用方法
  • 条件を指定したデータ絞り込みとグループ別の集計方法
  • ウィンドウ関数やNULL値処理などの実践的な活用テクニック

これらのポイントを押さえることで、データベースから必要な件数情報を効率的に取得できるようになります。

目次

COUNTの基本的な使い方

COUNT関数は、データベースに格納されたデータの件数を数えるために使用する関数です。プログラミング初心者の方でも理解しやすいように、まずは基本的な構文から学んでいきましょう。以下では、実際のテーブルを使った具体例とともに、COUNTの基本的な使い方を詳しく説明していきます。

なお、以降の解説では次のテーブルを使用します。

id

name

type

age

1

タロウ

イヌ

3

2

ハナ

ネコ

2

3

ポチ

イヌ

5

4

ミケ

ネコ

1

5

シロ

ウサギ

2

例で使用するデータベースを作成したい方は、次のSQLスクリプトを参考にしてください。

-- animalsテーブルを作成 CREATE TABLE animals ( id SERIAL PRIMARY KEY, name VARCHAR(50), type VARCHAR(50), age INT ); -- データを挿入 INSERT INTO animals (name, type, age) VALUES ('タロウ', 'イヌ', 3), ('ハナ', 'ネコ', 2), ('ポチ', 'イヌ', 5), ('ミケ', 'ネコ', 1), ('シロ', 'ウサギ', 2);

【関連】
SQLをもっと詳しく学ぶならpaizaラーニング

COUNT関数の基本構文

COUNT関数を使って、テーブル内の全レコード数を取得する基本的な方法を説明します。

COUNT(*)を使用すると、テーブル内の全行数を取得できます。

SELECT COUNT(*) FROM animals;

出力結果

count

5

※使用するDBMS(データベース管理システム)によって表示結果が異なる場合があります。以後のコードも同様です

特定のカラムを指定してカウントする場合は、カラム名を指定します。NULL値は除外されるため、実際のデータが入っている件数がわかります。

SELECT COUNT(name) FROM animals;

出力結果

count

5

COUNTとDISTINCT

重複したデータを除いてカウントしたい場合は、COUNTとDISTINCTを組み合わせて使用します。

動物の種類(type)が何種類あるかを調べてみましょう。DISTINCTを使わない場合と比較してみます。

SELECT COUNT(type) FROM animals;

出力結果

count

5

SELECT COUNT(DISTINCT type) FROM animals;

出力結果

count

3

最初のクエリは全ての行のtype値をカウントし5を返しますが、2番目のクエリはユニークな種類のみをカウントするため、イヌ、ネコ、ウサギの3種類という結果になります。

条件付きCOUNTでデータを絞り込む

実際のデータ分析では、全てのデータを数えるだけでなく、特定の条件に合うデータのみをカウントしたい場面が多くあります。ここでは、WHERE句を使った条件指定の方法や、複数の条件を組み合わせた集計方法について学習していきましょう。

WHERE句でのCOUNTの使い方

WHERE句を使って特定の条件に該当するデータのみをカウントする方法を説明します。

年齢が3歳以上の動物が何匹いるかを調べてみましょう。

SELECT COUNT(*) FROM animals WHERE age >= 3;

出力結果

count

2

特定の種類の動物だけをカウントしたい場合は、文字列の条件を指定します。

SELECT COUNT(*) FROM animals WHERE type = 'イヌ';

出力結果

count

2

複数条件での集計方法

ANDやORを使って複数の条件を組み合わせることで、より詳細な条件でのカウントが可能です。

年齢が2歳で、かつネコまたはウサギの動物をカウントしてみましょう。

SELECT COUNT(*) FROM animals WHERE age = 2 AND (type = 'ネコ' OR type = 'ウサギ');

出力結果

count

2

年齢が1歳または5歳の動物をカウントする場合は、IN演算子も使用できます。

SELECT COUNT(*) FROM animals WHERE age IN (1, 5);

出力結果

count

2

グループ単位での集計

データ分析において、カテゴリ別に件数を集計したい場合が頻繁にあります。GROUP BY句とCOUNTを組み合わせることで、種類別や条件別の件数を効率的に取得できます。ここでは、基本的なグループ化の方法から実践的な活用例まで詳しく解説していきます。

基本的なGROUP BYの使い方

GROUP BY句を使用することで、特定のカラムの値でデータをグループ化できます。

動物の種類別に何匹ずついるかを調べてみましょう。

SELECT type FROM animals GROUP BY type;

出力結果

type

イヌ

ネコ

ウサギ

年齢別にグループ化して、同じ年齢の動物がいるかを確認できます。

SELECT age FROM animals GROUP BY age ORDER BY age;

出力結果

age

1

2

3

5

COUNTとの組み合わせ例

GROUP BYとCOUNTを組み合わせることで、各グループの件数を取得できます。

動物の種類ごとに何匹ずつ飼っているかを調べてみましょう。

SELECT type, COUNT(*) as count FROM animals GROUP BY type;

出力結果

type

count

イヌ

2

ネコ

2

ウサギ

1

年齢別の動物の数も同様に集計できます。結果をわかりやすくするため、列名に別名をつけています。

SELECT age, COUNT(*) as animal_count FROM animals GROUP BY age ORDER BY age;

出力結果

age

animal_count

1

1

2

2

3

1

5

1

COUNTとOVERの組み合わせ

ウィンドウ関数のOVER句とCOUNTを組み合わせることで、より高度な集計処理が可能になります。通常のGROUP BYとは異なり、元の行数を保持しながら集計結果を表示できるため、詳細なデータ分析に活用できます。ここでは、基本的な使い方から実践的な応用例まで学習していきましょう。

基本的なOVER句の使い方

OVER句を使用すると、各行に対して全体の件数や部分的な集計結果を追加表示できます。

全ての行に対して、テーブル全体の動物の総数を表示してみましょう。

SELECT name, type, COUNT(*) OVER() as total_count FROM animals;

出力結果

name

type

total_count

タロウ

イヌ

5

ハナ   

ネコ

5

ポチ   

イヌ

5

ミケ   

ネコ   

5

シロ   

ウサギ

5

特定の条件でウィンドウを区切ることで、行ごとに異なる集計結果を表示できます。

SELECT name, type, age, COUNT(*) OVER(ORDER BY age) as running_count FROM animals;

出力結果

name

type

age

running_count

ミケ

ネコ

1

1

ハナ   

ネコ

2

2

シロ   

ウサギ

3

3

タロウ 

イヌ

4

4

ポチ 

イヌ

5

5

COUNTとの組み合わせ例

PARTITION BY句を使用することで、グループ別の件数を各行に表示できます。

各動物の行に、同じ種類の動物が何匹いるかという情報を追加してみましょう。

SELECT name, type, COUNT(*) OVER(PARTITION BY type) as type_count FROM animals ORDER BY type, name;

出力結果

name

type

type_count

タロウ

イヌ

2

ポチ   

イヌ

2

ハナ  

ネコ

2

ミケ

ネコ

2

シロ 

ウサギ

1

年齢グループごとの件数も同様に表示できます。同じ年齢の動物が何匹いるかがわかります。

SELECT name, age, COUNT(*) OVER(PARTITION BY age) as age_group_count FROM animals ORDER BY age, name;

出力結果

name

age

age_group_count

ミケ

1

1

ハナ  

2

2

シロ  

2

2

タロウ

3

1

ポチ

5

1

その他のCOUNT活用法

COUNTを実際のデータベース操作で使用する際には、基本的な使い方以外にも知っておくべき重要なテクニックがあります。特にNULL値の扱いや複数カラムを同時に集計する方法は、実務でよく遭遇する場面です。ここでは、より実践的なCOUNTの活用方法について詳しく解説していきます。

NULL値を含むデータの集計

NULL値を含むデータを集計する際の注意点と対処法について説明します。

まず、NULL値を含む新しいテーブルとして、以下のようなものがあるとします。

id

name

nickname

age

1

タロウ

NULL

3

2

ハナ

ハナちゃん

2

3

ポチ

NULL

5

例で使用するデータベースを作成したい方は、次のSQLスクリプトを参考にしてください。

-- NULL値を含むデータの集計用サンプルテーブル CREATE TABLE animals_with_null ( id SERIAL PRIMARY KEY, name VARCHAR(50), nickname VARCHAR(50), age INT ); INSERT INTO animals_with_null (name, nickname, age) VALUES ('タロウ', NULL, 3), ('ハナ', 'ハナちゃん', 2), ('ポチ', NULL, 5);

COUNT(*)は全ての行をカウントしますが、COUNT(カラム名)はNULL値を除外します。

SELECT COUNT(*) as all_rows, COUNT(nickname) as has_nickname FROM animals_with_null;

出力結果

all_rows

has_nickname

3

1

NULL値を含む行だけをカウントしたい場合は、IS NULL条件を使用します。

SELECT COUNT(*) FROM animals_with_null WHERE nickname IS NULL;

出力結果

count

2

複数カラムを対象にCOUNTする方法

複数のカラムを同時に集計する方法や、条件式を使った集計テクニックを紹介します。

CASE文を使用して、条件に応じた集計を行うことができます。年齢が3歳以上と未満の動物を同時にカウントしてみましょう。

SELECT COUNT(CASE WHEN age >= 3 THEN 1 END) as adult_count, COUNT(CASE WHEN age < 3 THEN 1 END) as young_count FROM animals;

出力結果

adult_count

young_count

2

3

複数の集計を一度に実行することで、効率的にデータの概要を把握できます。種類別の件数も同時に取得してみましょう。

SELECT COUNT(*) as total, COUNT(CASE WHEN type = 'イヌ' THEN 1 END) as dog_count, COUNT(CASE WHEN type = 'ネコ' THEN 1 END) as cat_count FROM animals;

出力結果

total

dog_count

cat_count

5

2

2

よくある質問(Q&A)

Q: COUNT(*)とCOUNT(1)に違いはありますか?

A: 実際の動作に違いはありません。どちらも全ての行をカウントします。COUNT(*)の方が一般的でわかりやすいため推奨されています。多くのデータベースシステムで同じ実行計画が使用されます。

Q: COUNTの結果が0になることはありますか?

A: はい、条件に該当するデータが存在しない場合、COUNTは0を返します。これはエラーではなく正常な動作です。WHERE句で絞り込んだ結果、該当する行がない場合によく発生します。

Q: GROUP BYなしでCOUNTを使うとエラーになりますか?

A: GROUP BYなしでCOUNTを使用することは可能です。この場合、テーブル全体の件数を取得する単一の結果が返されます。ただし、COUNT以外の通常のカラムと組み合わせる場合はGROUP BYが必要になります。

Q: サブクエリでCOUNTを使うことはできますか?

A: はい、サブクエリ内でCOUNTを使用することは可能です。メインクエリの条件として件数を利用したり、EXISTS文と組み合わせて存在チェックを行ったりする場面でよく使われます。

SELECT * FROM animals a WHERE ( SELECT COUNT(*) AS type_count FROM animals a2 WHERE a2.type = a.type ) > 1;

出力結果

id

name

type

age

1

タロウ

イヌ

3

2

ハナ

ネコ

2

3

ポチ

イヌ

5

4

ミケ

ネコ

1

Q: COUNTの実行速度を向上させる方法はありますか?

A: インデックスを適切に設定することで大幅に高速化できます。WHERE句で使用するカラムやGROUP BYで指定するカラムにインデックスを作成すると効果的です。また、DBMSによっては、COUNT(*)とCOUNT(主キー)で速度に差が出る場合があります。

まとめ

本記事では、SQL COUNTの基本的な使い方から応用的なテクニックまで、プログラミング初心者の方にもわかりやすく解説してきました。COUNTは単純に見えて実は奥深い機能を持っており、データ分析において欠かせない重要な関数です。

COUNT文が活躍する場面

  • データベースの件数を把握したいときに使用
  • 特定条件のデータだけを集計したい場合に有効
  • カテゴリ別やグループ単位で集計する際に活躍

重要なポイント

  • COUNT(*)で全行数、COUNT(カラム名)でNULL以外の件数を取得
  • WHERE句との組み合わせで条件に合致するデータのみを集計可能
  • GROUP BYと組み合わせることでカテゴリ別の件数を効率的に算出
  • DISTINCT句を使用して重複を除いた一意な値の件数を取得
  • ウィンドウ関数のOVER句で行ごとに集計結果を表示

これらの基本を押さえておけば、データベースからさまざまな角度で件数情報を取得できるようになります。複雑な集計処理も、基本的なCOUNT操作の組み合わせで実現できることがほとんどです。NULL値の扱いや複数条件での集計など、実務でよく遭遇するパターンも理解しておくことで、より実践的なデータ分析が可能になるでしょう。

SQLをはじめとするプログラミングスキルを体系的に学習したい方には、手軽に学べるpaizaラーニングがおすすめです。動画とテキストを組み合わせた学習環境で、段階的にスキルアップできます。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. ナレッジ
  3. SQLのナレッジ記事一覧
  4. SQLのCOUNTの基本的な使い方をマスターしよう!初心者向け完全ガイド