COUNT¶
指定した列のNULL 以外のレコードの数、またはレコードの合計数を返します。
構文¶
集計関数
ウィンドウ関数
window_frame の構文の詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
引数¶
expr1列名。修飾名にもできます(例: database.schema.table.column_name)。
expr2必要に応じて、追加の列名を含めることができます。例えば、姓と名の異なる組み合わせの数をカウントできます。
expr3結果を複数のウィンドウに分割する場合、パーティション化する列です。
expr4各ウィンドウを並べ替える列です。これは、最終結果セットを順序付けるための ORDER BY 句とは別のものです。
*記録の総数を返します。
関数にワイルドカードを渡す場合、ワイルドカードをテーブルの名前またはエイリアスで修飾することができます。例えば、
mytableというテーブルからすべての列を渡すには、以下のように指定します。ILIKE と EXCLUDE キーワードを使ってフィルタリングすることもできます。
ILIKE は、指定されたパターンに一致する列名でフィルターします。許されるパターンは1つのみです。例:
EXCLUDE は、指定された列に一致しない列名をフィルターします。例:
修飾子は、これらのキーワードを使用する場合に有効です。以下の例では、 ILIKE キーワードを使用して、テーブル
mytable内のパターンcol1%に一致するすべての列をフィルターします。ILIKE と EXCLUDE キーワードは、1つの関数呼び出し内で組み合わせることはできません。
修飾もフィルターもされていないワイルドカード(
*)を指定した場合、この関数は NULL の値を持つ記録を含む記録の総数を返します。フィルターに ILIKE または EXCLUDE キーワードでワイルドカードを指定した場合、この関数は NULL 値を持つ記録を除外します。
この関数では、 ILIKE と EXCLUDE キーワードは SELECT リストまたは GROUP BY 句でのみ有効です。
ILIKE と EXCLUDE キーワードの詳細については、 SELECT の「パラメータ」セクションをご参照ください。
alias.*NULL 値を含まない記録の数を返します。例については、 例 をご参照ください。
戻り値¶
NUMBER 型の値を返します。
使用上の注意¶
この関数は、 JSON null (VARIANT NULL)を SQL NULL として扱います。
NULL 値と集計関数の詳細については、 集計関数と NULL 値 をご参照ください。
この関数が集計関数として呼び出される場合、
DISTINCTキーワードを使用すると、すべての列に適用されます。例えば、DISTINCT col1, col2, col3は、列col1、col2、およびcol3のさまざまな組み合わせの数を返すことを意味します。例えば、次のデータを想定します。この場合、関数は
2を返します。これは、3つの列の値の個別の異なる組み合わせの数です。
この関数が、 ORDER BY 句を含む OVER 句を持つウィンドウ関数として呼び出される場合:
ウィンドウフレームが必要です。ウィンドウフレームが明示的に指定されていない場合、次のような暗黙のウィンドウフレームが使用されます。
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW構文、使用上の注意、例を含むウィンドウフレームの詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
ウィンドウ関数内でキーワード DISTINCT を使用することは禁止されており、コンパイル時間エラーが発生します。
条件に一致する行の数を返すには、 COUNT_IF を使用します。
可能であれば、 行アクセスポリシー なしでテーブルとビューに COUNT 関数を使用します。この関数を使用したクエリは、行アクセスポリシーのないテーブルまたはビューでより高速かつ正確になります。パフォーマンスの違いの理由は次のとおりです。
Snowflakeはテーブルとビューの統計を維持し、この最適化により単純なクエリをより高速に実行できます。
テーブルまたはビューに行アクセスポリシーが設定されていて、クエリで COUNT 関数が使用されている場合、Snowflakeは各行をスキャンして、ユーザーがその行を表示できるかどうかを判断する必要があります。
例¶
以下の例では、 NULL 値を含むデータに対して COUNT 関数を使用しています。
テーブルを作成して値を挿入します。
テーブルをクエリします。
この出力の All 列は、 COUNT に修飾もフィルターもされていないワイルドカードが指定された場合、関数は NULL 値を持つ行を含むテーブル内の行の総数を返すことを示しています。出力の他の列は、列またはフィルター付きワイルドカードが指定された場合、関数は NULL 値を含む行を除外することを示しています。
次のクエリでは、 COUNT 関数を GROUP BY 句とともに使用しています。
次の例は、 COUNT(alias.*) が NULL 値を含まない行の数を返すことを示しています。 basic_example テーブルには合計6行ありますが、3行には少なくとも1つの NULL 値があり、残りの3行には NULL 値がありません。
次の例は、 JSON null (VARIANT NULL)が COUNT 関数によって SQL NULL として扱われることを示しています。
テーブルを作成し、 SQL NULL 値と JSON null値の両方を含むデータを挿入します。
この SQL コードでは、次に注意してください。
最初の INSERT INTO ステートメントは、 VARIANT 列と VARIANT 以外の列の両方に SQL NULL を挿入します。
2番目の INSERT INTO ステートメントは、 JSON null(VARIANT NULL)を挿入します。
最後の2つの INSERT INTO ステートメントは、 NULL VARIANT 以外の値を挿入します。
データを表示します。
COUNT 関数が、 NULL と JSON null(VARIANT NULL)の値の両方を NULLs として扱うことを示しています。テーブルには4つの行があります。1つには SQL NULL があり、もう1つには JSON nullがあります。これらの行は両方ともカウントから除外されるため、カウントは 2 になります。