데이터분석 기록일지

문제풀이/스파르타 - sql 문제

[SQL] 데이터와 친해지는 SQL | 1회차 숙제

야하루 2024. 6. 26. 14:51

- 문제에 사용되는 table 구조

 

-  table 칼럼 설명

구분
상세
schema
logid
로그id
int
ip_addr
ip주소
string
date
날짜, yyyy-mm-dd
string
game_account_id
게임계정id
string
game_actor_id
게임캐릭터id
int
level
현재레벨
int
exp
현재경험치
int
serverno
서버넘버
int
zone_id
지역넘버
int
etc_num1
파티id
int
etc_num2
파티원수
int
etc_str1
아이템 획득경로
string
etc_num3
아이템 획득량
int
etc_str2
아이템 이름
string

 

 

 

1. date 컬럼이 2023-01-01 보다 큰 날짜의 game_account_id, game_actor_id, serverno를 추출해주세요.

 

SELECT game_account_id, game_actor_id, serverno
FROM users
where date > '2023-01-01'

실행 결과

 

 

 

2.  (1)level 컬럼이 10 초과이고, (2)serverno컬럼이 1이 아니며, (3)아이템이름컬럼이 레벨업 패키지 또는 시즌패스이고, (4)아이템 획득경로가 상점에서 구매한 경우의
date, ip_addr, exp, zone_id 를 추출하고 결과값을 date 기준 내림차순으로 정렬하여 추출해주세요.

 

SELECT date, ip_addr, exp, zone_id
FROM users
where level >10 
	and serverno <> 1 
	and etc_str2 in ('레벨업 패키지','시즌패스') 
	and etc_str1 = '상점에서 구매'
order by date desc

실행 결과

 

 

 

3. case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, 컬럼이름을 ‘levelgroup’ 으로 설정해주세요. game_actor_id, level, levelgroup, date컬럼을 추출해주시고, date 를 기준으로 내림차순 정렬해주세요.

 

  • 레벨구간
    • 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"
		 when level between 91 and 100 then "91~100Lv" end levelgroup,
		date
FROM users
order by date desc

 

실행 결과

 

 

 

4. date 컬럼을 yyyy-mm 형식의 월 형태로 바꾸고, 컬럼이름을 m 으로 지정해주세요.
game_account_id, game_actor_id 를 추출하되, 월을 기준으로 오름차순, 월이 같을 경우 game_actor_id 를 내림차순으로 정렬해주세요. 

 

SELECT date_format(date,'%Y-%m') m,
		game_account_id,
		game_actor_id
FROM users
order by 1, 3 desc

실행 결과