* 조건문
SELECT CASE WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
ELSE 결과3
END AS 새로운 컬럼이름
FROM 테이블명
;
결과1, 2 뒤에 , 붙이지 않도록 주의!
| 연산의 예 | 의미 |
| N<10, N>10 | N이 10 미만, N이 10 초과 |
| N<=10, N>=10 | N이 10 이하, N이 10 이상 |
| N=10 | N이 10인 값 |
| N!=10 | N이 10이 아닌 값 |
| LIKE('%문자%') | 문자열이 ~와 같을 때 |
| A AND B | A 그리고 B를 모두 만족하는 값 |
| A OR B | A 또는 B인 값 |
| NOT A, !A | A가 아닌 값 |
| A BETWEEN 10 AND 20 | A가 10과 20 사이에 포함된 값 = 10 이상 20 이하 |
| A IN B | B에 A가 포함된 값 |
| A NOT IN B | B에 A가 포함되지 않은 값 |
| A IS NULL | A 가 비어있는 값 |
| A IS NOT NULL | A 가 비어있지 않는 값 |
* 정렬
ORDER BY에 가까울 수록 우선순위가 높음!
ex. ORDER BY name DESC, age ASC - name 내림차순 후 age 오름차순 진행
* 숙제
1. 아래 조건을 만족하는 데이터의 game_account_id, game_actor_id, serverno 를 추출해주세요.
조건1) first_login_date 컬럼이 2023-01-01 초과
SELECT game_account_id,
game_actor_id,
serverno
FROM basic.users u
WHERE first_login_date > '2023-01-01'
;
2. 아래 조건을 모두 만족하는 데이터의 first_login_date, ip_addr, exp, zone_id 를 추출하고 first_login_date을 기준으로 내림차순으로 정렬해주세요.
조건1) level 컬럼이 10 초과이고조건2) serverno컬럼이 1이 아니며
조건3) 아이템 이름 컬럼이 레벨업 패키지 또는 시즌패스이고
조건4) 아이템 획득 경로가 상점에서 구매한 경우
SELECT first_login_date,
ip_addr,
exp,
zone_id
FROM basic.users u
WHERE (level > 10)
AND (u.serverno != 1)
AND (u.etc_str2 IN ('레벨업 패키지', '시즌패스'))
AND (u.etc_str1 = '상점에서 구매')
ORDER BY 1 DESC
;
3. 아래 조건을 만족하는 데이터의 game_actor_id, level, levelgroup, first_login_date 컬럼을 추출해주시고, first_login_date를 기준으로 내림차순 정렬해주세요.
조건1) case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, 컬럼이름을 ‘levelgroup’ 으로 설정해주세요.
[레벨구간]
◦ 1~10Lv 이하
◦ 11~20Lv 이하
◦ 21~30Lv 이하
◦ 31~40Lv 이하
◦ 41~50Lv 이하
◦ 51~60Lv 이하
◦ 61~70Lv 이하
◦ 71~80Lv 이하
◦ 81~90Lv 이하
◦ 91~100Lv
SELECT game_actor_id,
level,
CASE WHEN level BETWEEN 1 AND 10 THEN '1~10Lv 이하'
WHEN level BETWEEN 11 AND 20 THEN '11~20Lv 이하'
WHEN level BETWEEN 21 AND 30 THEN '21~30Lv 이하'
WHEN level BETWEEN 31 AND 40 THEN '31~40Lv 이하'
WHEN level BETWEEN 41 AND 50 THEN '41~50Lv 이하'
WHEN level BETWEEN 51 AND 60 THEN '51~60Lv 이하'
WHEN level BETWEEN 61 AND 70 THEN '61~70Lv 이하'
WHEN level BETWEEN 71 AND 80 THEN '71~80Lv 이하'
WHEN level BETWEEN 81 AND 90 THEN '81~90Lv 이하'
ELSE '91~100Lv'
END levelgroup,
first_login_date
FROM basic.users u
ORDER BY first_login_date DESC
;
SELECT game_actor_id,
level,
CASE WHEN level <= 10 THEN '1~10Lv 이하'
WHEN level <= 20 THEN '11~20Lv 이하'
WHEN level <= 30 THEN '21~30Lv 이하'
WHEN level <= 40 THEN '31~40Lv 이하'
WHEN level <= 50 THEN '41~50Lv 이하'
WHEN level <= 60 THEN '51~60Lv 이하'
WHEN level <= 70 THEN '61~70Lv 이하'
WHEN level <= 80 THEN '71~80Lv 이하'
WHEN level <= 90 THEN '81~90Lv 이하'
ELSE '91~100Lv'
END levelgroup,
first_login_date
FROM basic.users u
ORDER BY first_login_date DESC
;
📍 끝에 ; 붙이는 것 잊지 말기! (안붙여도 결과값은 동일하게 추출됨)
'데이터분석 부트캠프' 카테고리의 다른 글
| [데이터분석 부트캠프] SQL session #3. 집계함수, 그룹화, 서브쿼리 (0) | 2025.10.29 |
|---|---|
| [데이터분석 부트캠프] SQL 문제풀이 #1. 프로그래머스 SUM, MAX, MIN (1) | 2025.10.28 |
| [데이터분석 부트캠프] 파이썬 #5. 조건문, 반복문, While문 (0) | 2025.10.24 |
| [데이터분석 부트캠프] SQL session #1. SQL 기본 (0) | 2025.10.23 |
| [데이터분석 부트캠프] 파이썬 #4 리스트, 인덱스, 슬라이싱, 튜플, 딕셔너리 (0) | 2025.10.22 |