데이터 처리/SQL

[빅쿼리(BigQuery)] 문자열에 MAX() 함수를 쓰면 어떻게 될까? (feat. NULL 처리)

yourhm 2026. 1. 10. 17:07

MAX()는 집계 함수를 사용할 때 가장 많이 쓰이는 함수 중 하나다.

 

- 보통 숫자의 최댓값을 구할 때 사용하지만, 문자열(STRING) 컬럼에도 쓸 수 있을까?

- (만약 가능하다면) 데이터에 null이 포함되어 있을 때, null도 포함해서 정렬하나? 아니면 제외하고 정렬하나?

 

 

 문자열에 MAX()가 적용되는 원리

결론만 말하면, 빅쿼리에서 문자열(STRING) 타입에 MAX()를 적용 가능하다.

 

어떻게?

- 사전식 순서(Lexicographical Order)를 기준으로 비교한다.
- 숫자의 크기 대신 유니코드(Unicode) 기반의 사전식 순서(Lexicographical Order)로 값을 비교하여 가장 뒤에 오는 값을 반환한다.

 

 

  • apple vs banana: 'b'가 'a'보다 뒤에 있으므로 banana가 더 크다.
  • 숫자 형태의 문자열: "10"과 "2"를 비교하면, 첫 글자인 "1"과 "2"를 먼저 비교하기 때문에 "2"가 더 큰 값으로 인식된.

 

 

 

문자열 데이터에 NULL이 섞여 있을 때의 MAX()의 동작 방식

결론만 말하면, NULL은 제외 후 계산된다.

 

설명

- 빅쿼리의 집계 함수(MAX, MIN, AVG, SUM 등)는 NULL 값을 무시하도록 설계되어 있다.

- MAX() 함수는 데이터셋에서 NULL을 먼저 골라내어 제거한 뒤, 남은 유효한 데이터들만 모아서 비교를 수행한 후 최대값을 찾는다.
- NULL은 '가장 작은 값' 혹은 '가장 큰 값'으로 정렬되는 것이 아니라, 아예 계산 대상에서 빠진다!

- 단, 만약 모든 행의 값이 NULL이라면, 결과값은 NULL이다.

 

 

 

예시

A
apple
banana
carrot
pineapple
NULL

 

 

위와 같은 데이터가 있을 때 MAX(A)를 실행하면?

데이터에 섞여있는 NULL은 무시되고 나머지 중 최대값인 pineapple이 나온다.