쿼리 문장에서 많이 사용하는 그룹 함수 중에 하나가 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를 배열로 만든 후에 첫번째 값을 가져오는 방식으로 구현됩니다.
'분석 > 데이터분석' 카테고리의 다른 글
[BigQuery] datetime 과 timestamp 의 차이점 ? (0) | 2023.08.25 |
---|---|
[BigQuery] 빅쿼리에서 values 절을 구현해보자. (0) | 2023.02.20 |
[BigQuery] 빅쿼리에서 여러 날짜별 테이블을 한 쿼리로 (0) | 2022.08.17 |
[MySQL] date_trunc 함수를 구현하자. (0) | 2022.08.17 |
[SQL] 기하평균 을 구해보자 (0) | 2022.07.26 |