Google BigQuery

[강의 수강 11일차] 조건문과 연습 문제

쭈경잉 2025. 6. 2. 00:05

실제 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로 데이터 가공해보기!