MySQLの集計関数count()を詳しく解説!

1.詳しい使い方(5種類)

1. COUNT(*) 関数は、NULL 値を持つ行を含む、テーブル内のすべての行の数を返します。

SELECT COUNT(*) FROM students;

2. COUNT(column_name) 関数は、NULL 値を含む行を無視して、指定された列内の NULL 以外の値の数を返します。

SELECT COUNT(age) FROM students;

3. COUNT(DISTINCT column_name) は、NULL 値を含む行を無視して、指定された列内の個別の値の数を返します。

SELECT COUNT(DISTINCT age) FROM students;

4. COUNT(DISTINCT expr,[expr...]) 関数は、NULL 値を含む行を無視して、指定された式内の個別の非 NULL 値の数を返します。

SELECT COUNT(DISTINCT age, gender) FROM students;

5. COUNT(IF(condition, column_name, NULL)) 関数は、指定された条件を満たす、指定された列内の NULL 以外の値の数を返します。

SELECT COUNT(IF(gender='Female', 1, NULL)) FROM students;

この SQL ステートメントの IF(gender='女性', 1, NULL) は、学生の性別が「女性」の場合は 1 を返し、それ以外の場合は NULL を返すことを意味します。

COUNT 関数では、関数の引数が列名の場合、その列内の null 以外の値の数を返します。したがって、この SQL ステートメントの意味は、学生テーブル内の性別が「女性」である学生の数を数えるということです。IF 関数を使用して、性別が「女性」であるすべての行を 1 に変換すると、COUNT 関数はこれらの 1 の数、つまり性別が「女性」の学生の数を返します。

COUNT(*) を使用すると、行の値が NULL であるかどうかに関係なく、テーブル内のすべての行の数が返されることに注意してください。COUNT(column_name) を使用すると、指定した列内の null 以外の値の数のみがカウントされます。上記の SQL 文では、IF 関数は性別が「女性」でない行を NULL に変換するため、COUNT 関数は性別が「女性」の学生の数のみをカウントします。

2. count(*)、count(1)、count(列名)のどちらを使用するのが良いでしょうか?

1.関数
を使用する場合COUNT(*) 、一般的に使用される 3 つのメソッドは COUNT(*)、COUNT(1)、および COUNT(column_name) です。これらはすべて行数をカウントするために使用できます。ただし、パフォーマンスが異なるため、適切なものを選択するとクエリの効率が向上します。

COUNT(*)
COUNT(*) 最も一般的な方法で、NULL 値を含むすべての行の数をカウントできます。実際のアプリケーションでは、データベースはクエリ時に追加の操作を行わずにテーブルのメタデータを直接使用して行数を計算できるため、COUNT() のパフォーマンスは比較的高くなります。したがって、すべての行をカウントする必要がある場合に使用することをお勧めしますCOUNT(*)

2.
COUNT(1) の関数は COUNT() と同じですが、NULL 値を含むすべての行の数をカウントすることもできます。COUNT() と比較すると、クエリ時に各行の値を 1 回計算する必要があるため、COUNT(1) のパフォーマンスは若干劣ります。ただし、この違いは実際のアプリケーションでは明らかではないため、COUNT(1) も一般的に使用される方法です。

3.
COUNT(column_name) は、指定された列内の NULL 以外の値の数のみをカウントし、NULL 値を無視します。したがって、指定した列内の NULL 以外の値の数をカウントする必要がある場合は、COUNT(column_name) を使用できます。この方法はテーブル全体をスキャンする必要があり、行ごとに判断する必要があるため、パフォーマンスは比較的低くなります。

要約すると、COUNT() と COUNT(1) は、値の比較を必要とせず、テーブルのメタデータを利用して行をカウントできるため、一般に COUNT(column_name) よりも高速です。したがって、ほとんどの場合、COUNT() または COUNT(1) を使用することをお勧めします。

Guess you like

Origin blog.csdn.net/qq_45796667/article/details/129889687