any
any
컬럼에서 처음 만난 값을 선택하는 집계 함수예요. 쿼리는 임의의 순서로 실행될 수 있기 때문에 결과가 비결정적(non-deterministic)이라는 점을 기억해 두세요.
출처: 문서
본문
v1.1.0에서 도입됐어요.
컬럼에서 처음 만난 값을 선택해요. 쿼리가 임의의 순서로 실행될 수 있기 때문에 이 함수의 결과는 비결정적이에요. 임의적이지만 결정적인 결과가 필요하다면 min 또는 max 함수를 사용하세요.
기본적으로 이 함수는 NULL을 반환하지 않아요. 즉, 입력 컬럼의 NULL 값을 무시해요. 다만 함수를 RESPECT NULLS 수정자와 함께 사용하면, NULL이든 아니든 읽은 첫 값을 반환해요.
구현 세부 사항 (Implementation details)
어떤 경우에는 실행 순서에 의존할 수 있어요. ORDER BY를 사용하는 서브쿼리에서 SELECT가 나오는 경우가 여기에 해당해요.
SELECT 쿼리에 GROUP BY 절이나 최소 하나의 집계 함수가 있으면, ClickHouse는 (MySQL과 달리) SELECT, HAVING, ORDER BY 절의 모든 표현식이 키 또는 집계 함수로부터 계산되도록 요구해요. 다시 말해, 테이블에서 선택한 각 컬럼은 키에서 또는 집계 함수 안에서 사용되어야 해요.
MySQL처럼 동작하게 하려면 다른 컬럼들을 any 집계 함수 안에 넣으면 돼요.
함수의 반환 타입은 입력과 같지만, LowCardinality는 버려져요. 즉, 입력으로 행이 없다면 그 타입의 기본값을 반환해요 (정수는 0, Nullable() 컬럼은 Null). -OrNull 컴비네이터를 사용하면 이 동작을 바꿀 수 있어요.
구문 (Syntax)
any(column)[ RESPECT NULLS]
별칭 (Aliases)
any_value, first_value
인자 (Arguments)
column— 컬럼 이름.Any
반환 값 (Returned value)
처음 만난 값을 반환해요. Any
예시 (Examples)
사용 예시:
Query
CREATE TABLE tab (city Nullable(String)) ENGINE=Memory;
INSERT INTO tab (city) VALUES (NULL), ('Amsterdam'), ('New York'), ('Tokyo'), ('Valencia'), (NULL);
SELECT any(city), anyRespectNulls(city) FROM tab;
Response
┌─any(city)─┬─anyRespectNulls(city)─┐
│ Amsterdam │ ᴺᵁᴸᴸ │
└───────────┴───────────────────────┘