본문 바로가기
분석/데이터분석

[BigQuery] 빅쿼리에서 min_by, max_by

by 여우요원 2023. 1. 30.

쿼리 문장에서 많이 사용하는 그룹 함수 중에 하나가 min(), max() 함수입니다.

 

아래와 같은 학생별 시험 성적 테이블이 있다고 가정을 합니다.

 

 

 

 

 

 

 

 

 

  • 학생별로 가장 높은 점수와 가장 낮은 점수를 구하는 쿼리를 작성해볼까요.
    아래와 같이 계산할 수 있습니다.
select user_id
	, min(score) as min_score
    , max(score) as max_socre
from tbl_score
group by user_id
  • 이번에는 학생별로 점수가 가장 낮은 과목은 무었인지 구하는 쿼리를 작성해볼까요.
    이럴때 사용할 수 있는 함수가 min_by 입니다. 
    아시겠지만, min(subject) 라고 쓸 수 없는 이유는 이 함수는 알파벳의 사전순으로 가장 작은 값을 가져오는 내용이기 때문입니다.
select user_id
	, min_by(subject, score) as min_subject
from tbl_socre
group by user_id
  • 그런데 BiqQuery 에서는 안타깝게도 min_by, max_by 함수가 제공되지 않습니다.
    그래서 같은 역할을 하는 내용을 아래와 같이 구현할 수 있습니다.
select user_id
	, ARRAY_AGG(subject ORDER BY score LIMIT 1)[OFFSET (0)] as min_subject
    	, ARRAY_AGG(subject ORDER BY score desc LIMIT 1)[OFFSET (0)] as max_subject
from tbl_socre
group by user_id

쓰인 함수의 의미는 score의 순서대로 (또는 역순으로) subject를 배열로 만든 후에 첫번째 값을 가져오는 방식으로 구현됩니다.