ホームページ > データベース > mysql チュートリアル > COUNT(column) と COUNT(*): 各 SQL カウント関数をいつ使用する必要がありますか?

COUNT(column) と COUNT(*): 各 SQL カウント関数をいつ使用する必要がありますか?

DDD
リリース: 2025-01-13 15:07:43
オリジナル
440 人が閲覧しました

COUNT(column) vs. COUNT(*): When Should You Use Each SQL Count Function?

*SQL カウント関数: COUNT(column) と COUNT() の違いと適用シナリオ**

SQL データベースでは、カウント操作は基本的でよく使用される関数です。ただし、COUNT(column)COUNT(*) の選択は結果に直接影響します。この記事では、これら 2 つのカウント関数の主な違いについて詳しく説明します。

COUNT(column)この関数は、指定された列内の NULL 以外の値の数をカウントします。行の列に NULL 値が含まれている場合、その行はカウントから除外されます。この機能は、一意の値または特定のデータ ポイントをカウントする場合に役立ちます。

一方、COUNT(*) 関数は、列に NULL 値が含まれているかどうかに関係なく、選択したグループ内の行の総数をカウントします。 NULL 以外の値と NULL 値の両方をカウントします。

この違いは、NULL 値を含むテーブルを扱うときに明らかになります。たとえば、次のクエリを考えてみましょう:

<code class="language-sql">SELECT column_name, COUNT(column_name)
FROM table
GROUP BY column_name
HAVING COUNT(column_name) > 1;</code>
ログイン後にコピー

このクエリは、column_name の値が複数回出現する行グループを取得します。ただし、COUNT(column_name)COUNT(*) に置き換えると、潜在的な問題が発生します。

COUNT(*) を使用すると、クエリは、column_name に NULL 値を含む行を含む、各グループ内のすべての行をカウントします。これにより、出力に NULL 値とその NULL 値の数を含む余分な行が生成される場合があります。

これを説明するために、次のデータを含むテーブルを考えてみましょう:

id id2
NULL NULL
1 NULL
NULL 1
1 NULL
NULL 1
1 NULL
NULL NULL

COUNT(id) を使用した次のクエリは正しい結果を返します:

<code class="language-sql">SELECT id, COUNT(id)
FROM table
GROUP BY id
HAVING COUNT(id) > 1;</code>
ログイン後にコピー

出力:

id COUNT(id)
1 3

ただし、COUNT(*) を使用すると、追加の行が取得されます:

<code class="language-sql">SELECT id, COUNT(*)
FROM table
GROUP BY id
HAVING COUNT(*) > 1;</code>
ログイン後にコピー

出力:

id COUNT(*)
1 3
NULL 2

上に示すように、COUNT(*) を使用した結果には、id が NULL である追加の行とカウント 2 が含まれており、NULL id 値を含む行の数を示します。

したがって、COUNT(column)COUNT(*) の選択は、特定のデータと望ましい結果によって異なります。 COUNT(column) は NULL 以外の値をカウントするのに適していますが、COUNT(*) は NULL 値を含む行を含むすべての行をカウントするのに使用されます。

以上がCOUNT(column) と COUNT(*): 各 SQL カウント関数をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート