count
count
행 수 또는 not-NULL 값의 개수를 세는 집계 함수예요. count(), count(expr), COUNT(DISTINCT expr) 등 여러 구문을 지원해요.
출처: 문서
본문
v1.1.0에서 도입됐어요.
행 수 또는 not-NULL 값의 개수를 세요.
ClickHouse는 count에 대해 다음 구문을 지원해요:
count(expr)또는COUNT(DISTINCT expr).count()또는COUNT(*).count()구문은 ClickHouse 고유의 구문이에요.
세부 사항 (Details)
ClickHouse는 COUNT(DISTINCT ...) 구문을 지원해요. 이 구성의 동작은 count_distinct_implementation 설정에 따라 달라져요. 이 설정은 연산을 수행하는 데 사용할 uniq* 함수 중 어떤 것을 쓸지 정의해요. 기본값은 uniqExact 함수예요.
SELECT count() FROM table 쿼리는 기본적으로 MergeTree의 메타데이터를 사용해 최적화돼요. 행 수준 보안(row-level security)을 사용해야 한다면 optimize_trivial_count_query 설정으로 최적화를 비활성화하세요.
한편 SELECT count(nullable_column) FROM table 쿼리는 optimize_functions_to_subcolumns 설정을 활성화하면 최적화될 수 있어요. optimize_functions_to_subcolumns = 1일 때 함수는 전체 컬럼 데이터를 읽고 처리하는 대신 null 서브컬럼만 읽어요. SELECT count(n) FROM table 쿼리는 SELECT sum(NOT n.null) FROM table로 변환돼요.
COUNT(DISTINCT expr) 쿼리가 느리다면 GROUP BY 절을 추가하는 것을 고려해 보세요. 병렬화가 향상되기 때문이에요. 또한 COUNT(DISTINCT target_col)에 사용되는 대상 컬럼에 인덱스를 만들기 위해 projection을 사용할 수도 있어요.
구문 (Syntax)
count([expr])
인자 (Arguments)
expr— 선택 사항. 표현식. 함수는 이 표현식이 not null을 반환한 횟수를 세요.Expression
반환 값 (Returned value)
파라미터 없이 호출되면 행 수를 반환하고, 그 외에는 전달된 표현식이 not null을 반환한 횟수를 반환해요. UInt64
예시 (Examples)
기본 행 수:
Query
CREATE TABLE t (num UInt8) ENGINE = Memory;
INSERT INTO t VALUES (1), (1), (2), (2), (3);
SELECT count() FROM t
Response
┌─count()─┐
│ 5 │
└─────────┘
COUNT(DISTINCT) 예시:
Query
-- This example shows that `count(DISTINCT num)` is performed by the `uniqExact` function according to the `count_distinct_implementation` setting value.
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation';
SELECT count(DISTINCT num) FROM t
Response
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
┌─countDistinct(num)─┐
│ 3 │
└────────────────────┘