カテゴリ:

集計関数 (一般)、 ウィンドウ関数 (一般、ウィンドウフレーム)

COUNT

指定した列のNULL 以外のレコードの数、またはレコードの合計数を返します。

こちらもご参照ください。

COUNT_IFMIN / MAXSUM

構文

集計関数

COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )

COUNT( * )

ウィンドウ関数

COUNT( <expr1> [ , <expr2> ... ] )
    OVER ( [ PARTITION BY <expr3> ] [ ORDER BY <expr4> [ ASC | DESC ] [ <window_frame> ] ] )

ウィンドウフレーム 構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。

引数

式1

これは次のいずれかになります。

  • 修飾名にもなりうる、列名(例:database.schema.table.column_name)。

  • NULLsを含まない行の数を返す必要があることを示す Alias.* 関数。例については、 をご参照ください。

式2

必要に応じて、追加の列名を含めることができます。例えば、姓と名の異なる組み合わせの数をカウントできます。

式3

結果を複数のウィンドウに分割する場合、パーティション化する列です。

式4

各ウィンドウを並べ替える列です。これは、最終結果セットを順序付けるための ORDER BY 句とは別のものです。

使用上の注意

  • この関数は、 VARIANT NULL (JSON NULL)を SQL NULL として扱います。

  • NULL 値と集計関数の詳細については、 集計関数と NULL 値 をご参照ください。

  • この関数が集計関数として呼び出される場合、

    • DISTINCT キーワードを使用すると、すべての列に適用されます。たとえば、 DISTINCT col1, col2, col3 は、列col1、col2、col3のさまざまな組み合わせの数を返すことを意味します。例えば、データが次の場合:

      1, 1, 1
      1, 1, 1
      1, 1, 1
      1, 1, 2
      

      関数は3列の値の異なる組み合わせの数であるため、2を返します。

  • この関数がウィンドウ関数として呼び出される場合:

    • キーワード DISTINCT は構文的に許可されていますが、無視されます。

    • OVER()句内で ORDER BY サブ句を使用する場合、ウィンドウフレームを使用する必要があります。ウィンドウフレームが指定されていない場合、デフォルトは次の累積ウィンドウフレームです。

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      構文や例を含むウィンドウフレームの詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。暗黙的なウィンドウフレームの詳細については、 ウィンドウフレームの使用上の注意 をご参照ください。

  • 条件に一致する行の数を返すには、 COUNT_IF を使用します。

これは、 NULL 値で COUNT を使用する例です。クエリには、いくつかの COUNT(DISTINCT) 操作も含まれます。

CREATE TABLE basic_example (i_col INTEGER, j_col INTEGER);
INSERT INTO basic_example VALUES
    (11,101), (11,102), (11,NULL), (12,101), (NULL,101), (NULL,102);
SELECT * FROM basic_example;
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+
SELECT COUNT(*), COUNT(i_col), COUNT(DISTINCT i_col), COUNT(j_col), COUNT(DISTINCT j_col) FROM basic_example;
+----------+--------------+-----------------------+--------------+-----------------------+
| COUNT(*) | COUNT(I_COL) | COUNT(DISTINCT I_COL) | COUNT(J_COL) | COUNT(DISTINCT J_COL) |
|----------+--------------+-----------------------+--------------+-----------------------|
|        6 |            4 |                     2 |            5 |                     2 |
+----------+--------------+-----------------------+--------------+-----------------------+
SELECT i_col, COUNT(*), COUNT(j_col) FROM basic_example GROUP BY i_col;
+-------+----------+--------------+
| I_COL | COUNT(*) | COUNT(J_COL) |
|-------+----------+--------------|
|    11 |        3 |            2 |
|    12 |        1 |            1 |
|  NULL |        2 |            2 |
+-------+----------+--------------+

次の例は、 COUNT(alias.*) が NULL 値を含まない行の数を返すことを示しています。

次のようなデータセットを作成します。

  • 1行にすべてのnullがあります。

  • 2行にnullが1つだけあります。

  • 3行に少なくとも1つのnullがあります。

  • 合計4個の NULL の値があります。

  • 5行にはnullがありません。

  • 合計8行があります。

CREATE TABLE non_null_counter(col1 INTEGER, col2 INTEGER);
INSERT INTO non_null_counter(col1, col2) VALUES
    (NULL, NULL),   -- all NULL values
    (NULL, 1),      -- one NULL value
    (1, NULL),      -- one NULL value
    (1, 1),
    (2, 2),
    (3, 3),
    (4, 4),
    (5, 5);

クエリは、 NULL 値を含まない行の数である5のカウントを返します。

SELECT COUNT(n.*)
    FROM non_null_counter AS n;
+------------+
| COUNT(N.*) |
|------------|
|          5 |
+------------+

次の例は、 JSON (VARIANT) NULL が COUNT 関数によって SQL NULL として扱われることを示しています。

テーブルを作成し、 SQL NULL 値と JSON NULL 値の両方を含むデータを挿入します。

CREATE TABLE count_example_with_variant_column (i_col INTEGER, j_col INTEGER, v VARIANT);
BEGIN WORK;

-- SQL NULL for both a VARIANT column and a non-VARIANT column.
INSERT INTO count_example_with_variant_column (i_col, j_col, v) VALUES (NULL, 10, NULL);
-- VARIANT NULL
INSERT INTO count_example_with_variant_column (i_col, j_col, v) SELECT 1, 11, PARSE_JSON('{"Title": null}');
-- VARIANT NON-NULL
INSERT INTO count_example_with_variant_column (i_col, j_col, v) SELECT 2, 12, PARSE_JSON('{"Title": "O"}');
INSERT INTO count_example_with_variant_column (i_col, j_col, v) SELECT 3, 12, PARSE_JSON('{"Title": "I"}');

COMMIT WORK;

データを表示します。

SELECT i_col, j_col, v, v:Title
    FROM count_example_with_variant_column
    ORDER BY i_col;
+-------+-------+-----------------+---------+
| I_COL | J_COL | V               | V:TITLE |
|-------+-------+-----------------+---------|
|     1 |    11 | {               | null    |
|       |       |   "Title": null |         |
|       |       | }               |         |
|     2 |    12 | {               | "O"     |
|       |       |   "Title": "O"  |         |
|       |       | }               |         |
|     3 |    12 | {               | "I"     |
|       |       |   "Title": "I"  |         |
|       |       | }               |         |
|  NULL |    10 | NULL            | NULL    |
+-------+-------+-----------------+---------+

COUNT 関数が NULL と VARIANT NULL の値の両方を NULLs として扱うことを示します。テーブルには4行あります。1つには SQL NULL があり、もう1つには VARIANT NULL があります。これらの行は両方ともカウントから除外されるため、カウントは2になります。

SELECT COUNT(v:Title)
    FROM count_example_with_variant_column;
+----------------+
| COUNT(V:TITLE) |
|----------------|
|              2 |
+----------------+