본문 바로가기
데이터분석 부트캠프

[데이터분석 부트캠프] SQL session #2. SQL 구조, 조건, 정렬

by yyezzi 2025. 10. 27.
반응형

* 조건문

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
;

📍 끝에 ; 붙이는 것 잊지 말기! (안붙여도 결과값은 동일하게 추출됨)

 

반응형