COUNT¶
지정된 열에 대한 NULL이 아닌 레코드 수 또는 총 레코드 수를 반환합니다.
구문¶
집계 함수
COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )
COUNT(*)
COUNT(<alias>.*)
윈도우 함수
COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] ) OVER (
                                                     [ PARTITION BY <expr3> ]
                                                     [ ORDER BY <expr4> [ ASC | DESC ] [ <window_frame> ] ]
                                                     )
자세한 window_frame 구문은 윈도우 함수 구문 및 사용법 섹션을 참조하십시오.
인자¶
- expr1
- 정규화된 이름일 수 있는 열 이름(예: 데이터베이스.스키마.테이블.열_이름). 
- expr2
- 원하는 경우 추가 열 이름을 포함할 수 있습니다. 예를 들어, 성 및 이름의 고유한 조합 수를 셀 수 있습니다. 
- expr3
- 결과를 여러 윈도우로 분할하려는 경우 분할할 열입니다. 
- expr4
- 각 윈도우를 정렬할 열입니다. 이는 최종 결과 세트를 정렬하기 위한 모든 ORDER BY 절과는 별개입니다. 
- *
- 총 레코드 수를 반환합니다. - 함수에 와일드카드를 전달할 때 와일드카드를 테이블의 이름이나 별칭으로 한정할 수 있습니다. 예를 들어, - mytable이라는 테이블의 모든 열을 전달하려면 다음을 지정하십시오.- (mytable.*) - 필터링을 위해 ILIKE 및 EXCLUDE 키워드를 사용할 수도 있습니다. - ILIKE는 지정된 패턴과 일치하는 열 이름을 필터링합니다. 패턴은 하나만 허용됩니다. 예: - (* ILIKE 'col1%') 
- EXCLUDE는 지정된 열과 일치하지 않는 열 이름을 걸러냅니다. 예: - (* EXCLUDE col1) (* EXCLUDE (col1, col2)) 
 - 이러한 키워드를 사용할 경우 한정자가 유효합니다. 다음 예에서는 ILIKE 키워드를 사용하여 테이블 - mytable의 패턴- col1%와 일치하는 모든 열을 필터링합니다.- (mytable.* ILIKE 'col1%') - ILIKE 및 EXCLUDE 키워드는 단일 함수 호출에서 결합할 수 없습니다. - 정규화되지 않고 필터링되지 않은 와일드카드( - *)를 지정하는 경우 이 함수는 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열의 서로 다른 조합 수를 반환함을 의미합니다. 예를 들어, 데이터가 다음과 같다고 가정해 보겠습니다.- 1, 1, 1 1, 1, 1 1, 1, 1 1, 1, 2 - 이 경우 함수는 - 2를 반환하는데, 이 값이 세 열에 있는 값으로 구성된 고유한 조합의 개수이기 때문입니다.
 
- 이 함수가 ORDER BY 절을 포함하는 OVER 절이 있는 윈도우 함수로 호출되는 경우: - 윈도우 프레임이 필수입니다. 윈도우 프레임이 명시적으로 지정되지 않으면 다음과 같은 암시적 윈도우 프레임이 사용됩니다. - RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW- 구문, 사용법 노트, 예를 포함하여 윈도우 프레임에 대한 자세한 내용은 윈도우 함수 구문 및 사용법 섹션을 참조하십시오. 
- 윈도우 함수에서 DISTINCT 키워드를 사용하는 것은 금지되며 컴파일 시간 오류가 발생합니다. 
 
- 조건과 일치하는 행의 수를 반환하려면 COUNT_IF 를 사용합니다. 
- 가능하면 행 액세스 정책 없이 테이블과 뷰에 COUNT 함수를 사용합니다. 이 함수를 사용하는 쿼리는 행 액세스 정책이 없는 테이블 또는 뷰에서 더 빠르고 정확합니다. 성능 차이의 이유는 다음과 같습니다. - Snowflake는 테이블 및 뷰에 대한 통계를 유지 관리하며, 이러한 최적화를 통해 간단한 쿼리를 더 빠르게 실행할 수 있습니다. 
- 행 액세스 정책이 테이블 또는 뷰에 설정되고 COUNT 함수가 쿼리에 사용되는 경우, Snowflake는 각 행을 스캔하여, 사용자가 행을 볼 수 있는지 여부를 확인해야 합니다. 
 
예¶
다음 예에서는 NULL 값이 있는 데이터에 COUNT 함수를 사용합니다.
테이블을 만들고 값을 삽입합니다.
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
    ORDER BY i_col;
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+
SELECT COUNT(*) AS "All",
       COUNT(* ILIKE 'i_c%') AS "ILIKE",
       COUNT(* EXCLUDE i_col) AS "EXCLUDE",
       COUNT(i_col) AS "i_col", 
       COUNT(DISTINCT i_col) AS "DISTINCT i_col", 
       COUNT(j_col) AS "j_col", 
       COUNT(DISTINCT j_col) AS "DISTINCT j_col"
  FROM basic_example;
+-----+-------+---------+-------+----------------+-------+----------------+
| All | ILIKE | EXCLUDE | i_col | DISTINCT i_col | j_col | DISTINCT j_col |
|-----+-------+---------+-------+----------------+-------+----------------|
|   6 |     4 |       5 |     4 |              2 |     5 |              2 |
+-----+-------+---------+-------+----------------+-------+----------------+
이 출력의 All 열은 COUNT에 대해 정규화되지 않고 필터링되지 않은 와일드카드가 지정되는 경우 함수가 NULL 값이 있는 행을 포함하여 테이블의 총 행 수를 반환한다는 점을 보여줍니다. 출력의 다른 열은 필터링이 적용된 열이나 와일드카드가 지정될 경우 함수가 NULL 값이 있는 행을 제외한다는 점을 보여줍니다.
다음 쿼리에서는 GROUP BY 절과 함께 COUNT 함수를 사용합니다.
SELECT i_col, COUNT(*), COUNT(j_col)
    FROM basic_example
    GROUP BY i_col
    ORDER BY i_col;
+-------+----------+--------------+
| I_COL | COUNT(*) | COUNT(J_COL) |
|-------+----------+--------------|
|    11 |        3 |            2 |
|    12 |        1 |            1 |
|  NULL |        2 |            2 |
+-------+----------+--------------+
다음 예는 COUNT(alias.*) 가 NULL 값을 포함하지 않는 행의 수를 반환함을 보여줍니다. basic_example 테이블에는 총 6개의 행이 있지만, 3개의 행에는 하나 이상의 NULL 값이 있고 다른 3개의 행에는 NULL 값이 없습니다.
SELECT COUNT(n.*) FROM basic_example AS n;
+------------+
| COUNT(N.*) |
|------------|
|          3 |
+------------+
다음 예는 JSON null (VARIANT NULL)이 COUNT 함수에 의해 SQL NULL로 처리됨을 보여줍니다.
테이블을 만들고 SQL NULL 및 JSON null 값을 모두 포함하는 데이터를 삽입합니다.
CREATE OR REPLACE TABLE count_example_with_variant_column (
  i_col INTEGER, 
  j_col INTEGER, 
  v VARIANT);
BEGIN WORK;
INSERT INTO count_example_with_variant_column (i_col, j_col, v) 
  VALUES (NULL, 10, NULL);
INSERT INTO count_example_with_variant_column (i_col, j_col, v) 
  SELECT 1, 11, PARSE_JSON('{"Title": 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;
이 SQL 코드에서 다음 사항에 유의하십시오.
- 첫 번째 INSERT INTO 문은 VARIANT 열과 VARIANT가 아닌 열 모두에 SQL NULL을 삽입합니다. 
- 두 번째 INSERT INTO 문은 JSON null(VARIANT NULL)을 삽입합니다. 
- 마지막 두 INSERT INTO 문은 NULL VARIANT가 아닌 값을 삽입합니다. 
데이터를 표시합니다.
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 및 JSON null(VARIANT NULL) 값을 모두 NULL로 취급함을 보여줍니다. 테이블에 4개의 행이 있습니다. 하나에는 SQL NULL이 있고 다른 하나에는 JSON null이 있습니다. 두 행 모두 개수에서 제외되므로 개수는 2 입니다.
SELECT COUNT(v:Title)
    FROM count_example_with_variant_column;
+----------------+
| COUNT(V:TITLE) |
|----------------|
|              2 |
+----------------+