실제 SQL을 다루면서 "조건문"을 잘 쓰는 게 중요하다는 생각을 했는 데
내가 원하는 정보만 간결하게 추출하는 데에 있어 꼭 필요한 게 조건문이다.
📌 조건문
- 특정 조건이 참일 때 A, 아니면 B > 조건에 따른 분기 처리가 필요한 경우
ex. 컬럼을 변환할 때 사용 / 조건 자체를 네이밍 변경할 때(키 180 이상일 경우 "정말 크다")
- 조건에 따라 다른 값을 표시하고 싶을 때 사용
✅ 조건문을 사용하는 방법 : CASE WHEN, IF
데이터 분석을 하다 보면, 특정 카테고리를 하나로 합치는 전처리가 필요할 수 있음
정의를 어떻게 하느냐에 따라 묶어서 카테고리화할 경우 필수적인 요소
✏️ 데이터 지표 정의를 하면서 전처리가 필요한 경우 "조건문"을 활용하면 효율적이다
조건문을 활용할 사항이 발생하는 이유
데이터를 저장하는 쪽과 데이터를 분석하는 쪽이 나뉘는 환경이 많고
분석할 때 필요한 부분에서 조건 설정해서 변경하는 것이 더 유용하기 때문이다.
로우데이터 단위로 저장하고 > 분석을 할 때에는 특정 카테고리로 합쳐 보는 것이 용이하다.
만약 쪼개서 로우 단위로 보고 싶을 때 볼 수 없는 문제점이 발생되기 때문
조건문 1) CASE WHEN
✅ 여러 조건이 있을 경우 유용, 조건의 순서에 주의
SELECT
CASE
WHEN (조건1) THEN (조건1이 참일 경우 결과)
WHEN (조건2) THEN (조건2가 참일 경우 결과)
ELSE 그 외 조건일 경우 결과
END AS 새로운_컬럼_이름
# Rock(바위) 타입과 Ground(땅) 타입 유사해서 타입 새로 만들기 “Rock&Ground” (*전처리 과정)
SELECT
new_type1,
COUNT(DISTINCT id) AS cnt
FROM (
SELECT
*,
CASE
WHEN (type1 IN ("Rock","Ground")) OR (type2 IN ("Rock", "Ground"))
THEN "Rock&Ground"
ELSE type1 -- 아닐 경우, 그대로 출력하기
END AS new_type1
FROMbasic.pokemon
)
GROUP BY
new_type1
📌 CASE WHEN의 경우 작성 순서가 중요하다.
처음에 있는 조건문에 해당할 경우, 해당 조건문의 case 를 반영하기 때문!

위의 이미지처럼 100이상인 공격력 가진 포켓몬을 very strong으로 명명하고 싶은 데
오른쪽처럼 50 을 case when 조건으로 먼저 활용한 경우, Strong을 적용하게 된다.
✏️ 따라서 조건문을 활용할 때에는 적용 순서를 신경 써서 맨 첫번째 줄부터 순차 적용되는 조건문을 작성해야 한다.
- 조건 1, 조건 2에 둘 다 해당하면 앞선 순서를 따른다.
> 문자열 함수(특정 단어 추출)에서 이슈가 자주 발생되는 경우가 있어 주의하기
조건문 2) IF
단일 조건일 경우 활용
문법 : IF (조건문, True일 때의 값, False일 때의 값) AS 새로운_컬럼_이름
SELECT
IF(1=1, '동일한 결과', '동일하지 않은 결과') AS result1, -- 동일한 결과
IF(1=2, '동일한 결과', '동일하지 않은 결과') AS result2 -- 동일하지 않은 결과
조건문 함수 연습 문제 1) IF 절 활용
-- 1. 포켓몬의 'speed'가 70 이상이면 '빠름', 그렇지 않으면 '느림'으로 표시하는 새로운 컬럼 'Speed_Category'를 만들어 주세요
# 쿼리를 작성하는 목표, 확인할 지표 : Speed 컬럼 사용해 새로운 Speed_category aksemfrl
# 쿼리 계산 방법 : CASE WHEN, IF => 조건 단일이기에 IF 활용 70 이상
# 데이터의 기간 : X
# 사용할 테이블 : pokemon
# Join KEY : X
# 데이터 특징 : min speed 5, max speed 140
SELECT
-- MIN(speed), MAX(speed) 데이터를 모를 때 확인하는 과정을 거쳐야 한다.
id,
kor_name,
speed,
IF(speed >= 70, "빠름", "느림") AS Speed_Category
FROM basic.pokemon
조건문 함수 연습 문제 2) CASE WHEN 절 활용
-- 2.포켓몬의 'type1'에 따라 'Water', 'Fire', 'Electric' 타입은 각각 물','불',전기'로, 그 외 타입은 '기타'로 분류하는 새로운 컬럼 'type_Korean'을 만들어주세요
# 쿼리를 작성하는 목표, 확인할 지표 : type1을 사용해서 특정 조건을 만족하는 것은 값을 변경, 기타 -> type_Korean
# 쿼리 계산 방법 : CASE WHEN, IF => 여러 조건 CASE WHEN
# 데이터의 기간 : X
# 사용할 테이블 : pokemon
# Join KEY : X
# 데이터 특징 : 타입 여러가지가 있음
SELECT
id,
kor_naem
type 1,
CASE
WHEN type1 = "Water" THEN "물"
WHEN type1 = "Fire" THEN "불"
WHEN type1 = "Electric" THEN "전기"
ELSE "기타"
END AS type1_Korean
FROM basic.pokemon
조건문 함수 연습 문제 3 ) CASE WHEN 절 활용
-- 3.각 포켓몬의 총점(total)을 기준으로, 300이하면 'Low', 301에서 500사이면 'Medium', 501이상이면 'High'로 분류해주세요
# 쿼리를 작성하는 목표, 확인할 지표 : total 컬럼 > 조겁에 맞는 값 변경, 숫자 -> type_Korean
# 쿼리 계산 방법 : CASE WHEN, IF => 여러 조건 CASE WHEN /
# 데이터의 기간 : X
# 사용할 테이블 : pokemon
# Join KEY : X
# 데이터 특징 : total 컬럼 정수(INTEGER)
SELECT
id,
kor_name
total,
CASE
WHEN total >= 501 THEN "High"
WHEN total Between 301 AND 500 THEN "Medium"
ELSE "Low"
END AS total_grade
FROM basic.pokemon
✔️ 이때, Low 로 출력되는 값을 확인하고 싶어서 where total_grade = "Low"를 마지막에 추가해서 보고 싶어도
조회가 되지 않는다. 이는 FROM > WHERE > SELECT 절 순으로 로직이 조회되기 때문이다.
만약 Low 컬럼을 보고 싶을 때는 서브 쿼리를 활용하여 조회해볼 수 있다.
✔️ 모든 컬럼에 동일한 값을 추가하고 싶을 때는 "원하는 값" AS 컬럼명 으로 추가할 수 있다.
조건문 함수 연습 문제 4 ) CASE WHEN 절 활용
-- 6. 배틀에서 승자(winner_id)가 player_id와 같으면 'Player 1 wins', player2_id와 같으면 'Player 2 wins', 그렇지 않으면 'Draw'로 결과 출력
#쿼리를 작성하는 목표, 확인할 지표 : 승패 여부를 알 수 있는 컬럼 생성
#쿼리 계산 방법 : CASE WHEN
#사용할 테이블 : battle
SELECT
id,
winner_id,
player1_id,
player2_id,
CASE
WHEN winner_id=player1_id THEN "Player 1 Wins"
WHEN winner_id=player1_id THEN "Player 1 Wins"
ELSE "Draw"
END AS battel_result
FROM basic.battle
📌 [TIP] BigQuery 공식 문서 확인하는 방법

✔️ 업데이트가 잦고 Chat GPT 가 최신 것들을 반영하지 못할 수 있으니 공식 문서를 보는 습관을 들이면 좋다.

https://cloud.google.com/bigquery/docs?hl=ko 을 통해서 확인할 수 있다.
특히 함수에 대한 참고를 하면서 활용하면 좋다.
✏️ 교육 및 튜토리얼 통해서 추가 학습하는 방법! & 사용 사례도 있으니 필요한 것들 기준으로 확인해보기!

✔️ 공식 문서는 최신화된 버전이기 때문에 목적에 맞게 함수를 찾아보고 체크하는 것을 습관화로 들이면 좋다.
✔️ 공식 문서 Slack RSS Feed 추가하기
슬랙에서 알림 받아보기 : 개인 목적으로 사용할 슬랙 워크스페이스 생성 / 채널에 아래 명령어 입력
> feed subscribe https://cloud.google.com/feeds/bigquery-release-notes.xml
*이는 어느 정도 익숙해진 다음에 정기적으로 받아보고 새로운 것들에 대해서 익히면 좋을 듯 하다.
✏️ 이번 강의와 학습을 통해 느낀점과 배운점
✅ case when 의 경우 우리 회사에서 많이 활용하는 문법 중 하나 였다. 활용하는 방법 익혀야 겠다는 생각을 했다.
✅ 데이터 전처리할 때 "카테고라이징"에 있어서 case when 절이 필요하다는 것을 배웠다. SQL로 데이터 가공해보기!
'Google BigQuery' 카테고리의 다른 글
| [강의 수강 13일차] Join 문 연습 문제 풀기 (3) | 2025.06.06 |
|---|---|
| [강의 수강 12일차] Join 문 (0) | 2025.06.04 |
| [강의 수강 10일차] 시간 데이터 연습 문제 풀기 (0) | 2025.05.30 |
| [강의 수강 8일차] 데이터 탐색 - 변환 (1) 데이터 타입의 이해 / 문자열 함수 (0) | 2025.05.28 |
| [강의 수강 7일차] SQL 쿼리 잘 작성하기, 쿼리 템플릿 (0) | 2025.05.24 |