9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita株式会社Advent Calendar 2023

Day 11

【SQL関数】SQLのCOUNT(1) ←この1ってなに?

Last updated at Posted at 2023-12-10

この記事は、Qiita株式会社のカレンダー | Advent Calendar 2023 - Qiitaの11日目の記事です。


そもそもCOUNT関数とは?

ほとんどの方は知っていると思ういますが、一応説明をしておきます。
COUNT関数とは、SQLの集約関数の一つで指定したカラムのレコード数を調べる時に用いたりします。

カッコの中身について

COUNTの中身が1だったり、*だったり、カラム名だったり
現場においてもまちまちですよね。

例を出して説明していきます

下記のようなテーブルがあった際に

user テーブル

user_id user_name
1 taro
2 NULL
3 taro
SELECT COUNT(*) FROM user
+----------+
| count(*) |
+----------+
|        3 |
+----------+

COUNT(*)とすることで、全体のレコード数を計算することをができます

SELECT COUNT(user_name) FROM user
+------------------+
| count(user_name) |
+------------------+
|                2 |
+------------------+

COUNT(user_name)とすることで、user_nameがNULLの場合を除いた
レコード数を取得できます。

COUNT(1)の場合はどうなるでしょうか

SELECT COUNT(1) FROM user
+----------+
| count(*) |
+----------+
|        3 |
+----------+

重複回避のDISTINCTもまとめるとこんな感じ

列名 件数 内容
COUNT(*) 3 NULL含めた件数
COUNT(user_name) 2 NULLを除いたuser_nameの件数
COUNT(DISTINCT user_name) 1 NULLを除いたuser_nameをユニークとした件数
COUNT(1) 3 NULLを含めた件数

見ての通り、COUNT(*)COUNT(1)の実行結果が一緒になります。

じゃあCount(1)とCount(*)何が違うの?

COUNT(*) はデータベースエンジンに対して「すべての列をカウントする」という指示を出します。
そのため、行の存在そのものを数えるのでNULLであってもカウント対象になります。

じゃあCOUNT(カラム名)は何なのかというと、指定されたカラムに有効な値がセットされているものの行数が返ります。
もっというと、カラムがNULLじゃないものの行数です。

それを頭に入れて以下を見て見ましょう

COUNT(1)
COUNT(1) は「1という値が存在する行をカウントする」という指示になります。

select 1 from user

のデータ件数となり、

1
1
1
1

のようにNULLじゃないレコードが3件のためCOUNT(*)COUNT(1)が同じ実行結果になります。

おまけ

ここまで見てもわからない人でも人でも以下を見ればわかるはず...!

SELECT 'takashi' FROM user
SELECT COUNT('takashi') FROM user
'takashi' COUNT('takashi')
スクリーンショット 2023-12-06 11.01.51.png スクリーンショット 2023-12-06 11.02.23.png

SELECTされた3件全て、'takashi' IS NOT NULLの条件に当てはまるのでCOUNT関数
で出力される件数は3になります!

SELECT NULL FROM user
SELECT COUNT(NULL) FROM user
NULL COUNT(NULL)
スクリーンショット 2023-12-06 11.06.58.png スクリーンショット 2023-12-06 11.07.25.png

SELECTされた3件全て、NULL IS NOT NULLの条件に当てはまらないのでCOUNT関数
で出力される件数は0になります!

おわりに

今回はCOUNT関数とその中身について、自分の備忘録も兼ねてまとめさせて頂きました。
例題もいくつか出したので視覚的にも理解できたかなと思います。

より、COUNT関数に詳しい方がいれば性能面含めて、編集リクエストやコメント頂けると嬉しいです...!

参考文献

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?