SQLのCOUNTはDBのレコード件数を数える際に用いる頻出の関数ですが、COUNT()の括弧の中で何を指定すべきなのか、NULLの扱い、重複の処理など細かく考えるとよく知らない…ということもあるかもしれません。今回は、そんなSQLのCOUNT関数について細かく解説していきます。
COUNTとは
SQLのCOUNTとは集計関数の1つで、指定したカラムのレコード件数を数える関数です。また、応用すれば重複したレコードを除いたレコード数やグループごとのレコード数、条件を指定したレコード数も調べられます。
COUNT関数の基本
先ほど、COUNT関数を指定したカラムのレコード件数を数える関数といいましたが、COUNT関数単体で使うことはなく、基本的には「SELECT」句でその結果を抽出する際に用いられます。
COUNT関数の基本構文
【基本構文】
SELECT COUNT(*) FROM テーブル名;
カッコの中身
カッコの中身をなににするかで抽出結果が変わります。
カッコの中身 | |
* | NULLを含めたレコード数 |
カラム名 | NULLを除いたレコード数 |
1 | NULLを含めたレコード件数 |
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) |
1 | Tanaka | Tokyo | 100 |
2 | Yamada | Tokyo | 80 |
3 | Sato | Nagoya | 85 |
4 | Suzuki | Osaka | 90 |
5 | Takahashi | Osaka | NULL |
6 | Inoue | Fukuoka | 90 |
レコード数の取得
【使用イメージ】
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;
【実行結果】
アスタリスク | 列名 |
6 | 5 |
≫まずは簡単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;
【実行結果】
試験地 | 受験者数 |
Tokyo | 2 |
Nagoya | 1 |
Osaka | 2 |
Fukuoka | 1 |
試験地ごとの受験者数が求められました。このように、GROUP BY句で同じ値を持つデータごとのレコード数を求めることができ、データ分析にも応用することができます。
こちらもアスタリスクを指定するとNULL値もデータ件数に含まれるので、NULLを除外する場合は列名を指定する必要があります。
条件を指定したレコード数の取得
【使用イメージ】
SELECT COUNT(*) FROM テーブル名 WHERE 条件
WHERE句は、特定の条件を満たすデータのみを抽出するコマンドです。COUNT関数とWHERE句を組み合わせることで特定の条件を満たすデータ数を集計できます。
【試験テーブル】
ID | 名前 | 試験地 | 点数 |
1 | Tanaka | Tokyo | 100 |
2 | Yamada | Tokyo | 80 |
3 | Sato | Nagoya | 85 |
4 | Suzuki | Osaka | 90 |
5 | Takahashi | Osaka | NULL |
6 | Inoue | Fukuoka | 90 |
【実行コード】
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関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- テーブル構造を変更する「ALTER TABLE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- データの取得件数を制限する「LIMIT」句
- 条件分岐処理「CASE」式
- 「NULL」の扱い方
- 「主キー」とは?
- 「外部キー」とは?
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
- 2023.08.29
- Other
Author:鷺坂りな @TechMania編集部 投稿一覧
Otherカテゴリの最新記事
-
- 2024.11.22
【Excel VBA】空白文字を削除するTrim関数の使い方を解説
-
- 2024.11.22
【Excel VBA】配列の宣言・初期化・使用方法を解説
-
- 2024.11.20
【SQL】データを抽出するSELECT文の使い方を基礎から解説
-
- 2024.11.15
【Excel VBA】VBAでVLOOKUP関数を使用する方法を解説
-
- 2024.11.15
【Excel VBA】条件付き書式をVBAで追加する方法を解説
-
- 2024.11.08
【VBA】エラーが発生した場合の処理を実装する方法を解説