SQL Serverでは、COUNT_BIG()
関数とCOUNT()
基本的に同じことを行います。グループ内で見つかったアイテムの数を返します。基本的に、これらの関数を使用して、テーブルまたは結果セットに含まれる行数を確認できます。
多くの場合、どちらかを選択できます。ただし、これら2つの機能には違いがあり、どちらか一方を使用する必要がある場合があります。
違いは、COUNT()
結果をintとして返します 、一方、COUNT_BIG()
結果をbigintとして返します 。
つまり、COUNT_BIG()
を使用する必要があります 結果が2,147,483,647を超えると予想される場合(つまり、クエリが2,147,483,647行を超える場合)。
例1-COUNT()がOKの場合
これは、両方のCOUNT()
がシナリオを示す基本的な例です。 およびCOUNT_BIG()
使用可能:
USE WideWorldImportersDW; SELECT COUNT(*) AS 'COUNT', COUNT_BIG(*) AS 'COUNT_BIG' FROM Fact.[Order];
結果:
+---------+-------------+ | COUNT | COUNT_BIG | |---------+-------------| | 231412 | 231412 | +---------+-------------+
Fact。[Order] に231412行あることがわかります。 テーブル。
この場合、行数が int に格納できるほど小さいため、両方の関数で処理できます。 bigint 。
ただし、結果が非常に大きいために int 保存できなかった場合は、COUNT_BIG()
しか使用できませんでした 。
例2– COUNT_BIG()が必要な場合
COUNT_BIG()
を使用する必要がある場所の例を次に示します。 。
SELECT COUNT_BIG(*) AS 'Row Count' FROM ReallyBigTable;
結果:
+-----------------+ | Row Count | |-----------------| | 9147483648 | +-----------------+
この場合、行数が非常に多いため、 int それを処理することはできません。幸い、COUNT_BIG()
を使用できます 、結果を bigintとして返すため 。
両方の関数のデータ型を確認する
前の例を見ると、実際にはデータ型名を確認できません。 COUNT()
としか想定できません 結果をintとして返します およびCOUNT_BIG()
bigintを使用します これは、Microsoftのドキュメントに記載されていることです(ただし、2番目の例は intではあり得ないことはわかっています。 intには値が大きすぎるため )。
sp_describe_first_result_set
を使用できます これらの各関数の戻りデータ型を確認するためのストアドプロシージャ。
COUNT()のデータ型を確認してください
EXEC sp_describe_first_result_set N'SELECT COUNT(*) FROM Fact.[Order]', null, 0;
結果(垂直出力を使用):
is_hidden | 0 column_ordinal | 1 name | NULL is_nullable | 1 system_type_id | 56 system_type_name | int max_length | 4 precision | 10 scale | 0 collation_name | NULL user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 0 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 38 tds_length | 4 tds_collation_id | NULL tds_collation_sort_id | NULL
はい、必要のない情報はたくさんありますが、 system_type_name を見ると 列を見ると、その値が int であることがわかります。 。これは、クエリが結果を intとして返したことを示しています。 、 予想通り。 max_length および 精度 値はintと一致しています データ型。
COUNT_BIG()のデータ型を確認してください
この例では、COUNT(*)
を置き換えるだけです。 COUNT_BIG(*)
を使用 :
EXEC sp_describe_first_result_set N'SELECT COUNT_BIG(*) FROM Fact.[Order]', null, 0;
結果(垂直出力を使用):
is_hidden | 0 column_ordinal | 1 name | NULL is_nullable | 1 system_type_id | 127 system_type_name | bigint max_length | 8 precision | 19 scale | 0 collation_name | NULL user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 0 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 38 tds_length | 8 tds_collation_id | NULL tds_collation_sort_id | NULL
今回は、
system_type_name
bigint
です 。これは、COUNT_BIG()
クエリは結果をbigintとして返しました 、 予想通り。
max_length
および
精度
値もbigintと一致しています データ型。
ちなみに、上記を行うより簡単な方法は、ストアドプロシージャを呼び出すときに、両方の関数をクエリに結合することです。
このように:
EXEC sp_describe_first_result_set N'SELECT COUNT(*), COUNT_BIG(*) FROM Fact.[Order]', null, 0;
これにより、SELECT
の関数ごとに1つずつ2行が出力されます。 ステートメント。