COUNT¶
지정된 열에 대한 NULL이 아닌 레코드 수 또는 총 레코드 수를 반환합니다.
구문¶
집계 함수
COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )
COUNT( * )
윈도우 함수
COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] ) OVER (
[ PARTITION BY <expr3> ]
[ ORDER BY <expr4> [ ASC | DESC ] [ <window_frame> ] ]
)
window_frame
구문에 대한 자세한 내용은 윈도우 프레임 구문과 사용법 을 참조하십시오.
인자¶
expr1
다음 중 하나여야 합니다.
정규화된 이름일 수 있는 열 이름(예: 데이터베이스.스키마.테이블.열_이름).
함수가 NULL을 포함하지 않는 행의 수를 반환해야 함을 나타내는
Alias.*
. 예를 보려면 예 를 참조하십시오.
expr2
원하는 경우 추가 열 이름을 포함할 수 있습니다. 예를 들어, 성 및 이름의 고유한 조합 수를 셀 수 있습니다.
expr3
결과를 여러 윈도우로 분할하려는 경우 분할할 열입니다.
expr4
각 윈도우를 정렬할 열입니다. 이는 최종 결과 세트를 정렬하기 위한 모든 ORDER BY 절과는 별개입니다.
사용법 노트¶
이 함수는 VARIANT NULL (JSON null)을 SQL 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를 반환합니다. 3개의 열에 있는 값의 고유한 조합의 수이기 때문입니다.
이 함수가 윈도우 함수(즉, OVER 절 포함)로 호출될 때:
OVER 절에 ORDER BY 하위 절이 포함된 경우:
윈도우 프레임이 필수입니다. 윈도우 프레임이 명시적으로 지정되지 않은 경우, ORDER BY는 누적 윈도우 프레임을 의미합니다.
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
구문 및 예를 포함하여 윈도우 프레임에 대한 내용은 윈도우 프레임 구문과 사용법 섹션을 참조하십시오.
암시적 윈도우 프레임에 대한 내용은 윈도우 프레임 사용법 노트 섹션을 참조하십시오.
윈도우 함수에서 DISTINCT 키워드를 사용하는 것은 금지되며 컴파일 시간 오류가 발생합니다.
조건과 일치하는 행의 수를 반환하려면 COUNT_IF 를 사용합니다.
가능하면 행 액세스 정책 없이 테이블과 뷰에 COUNT 함수를 사용합니다. 이 함수를 사용하는 쿼리는 행 액세스 정책이 없는 테이블 또는 뷰에서 더 빠르고 정확합니다. 성능 차이의 이유는 다음과 같습니다.
Snowflake는 테이블 및 뷰에 대한 통계를 유지 관리하며, 이러한 최적화를 통해 간단한 쿼리를 더 빠르게 실행할 수 있습니다.
행 액세스 정책이 테이블 또는 뷰에 설정되고 COUNT 함수가 쿼리에 사용되는 경우, Snowflake는 각 행을 스캔하여, 사용자가 행을 볼 수 있는지 여부를 확인해야 합니다.
예¶
이는 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 ORDER BY i_col;+-------+-------+ | 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 ORDER 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이 있습니다.
3개의 행에는 하나 이상의 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 (aka JSON 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(JSON null) 값을 모두 NULL로 취급함을 보여줍니다. 테이블에 4개의 행이 있습니다. 하나에는 SQL NULL이 있고 다른 하나에는 VARIANT NULL이 있습니다. 두 행 모두 개수에서 제외되므로 개수는 2입니다.SELECT COUNT(v:Title) FROM count_example_with_variant_column;+----------------+ | COUNT(V:TITLE) | |----------------| | 2 | +----------------+