데이터분석 6기/본캠프

[TIL] 2025-02-25 라이브 세션 강의 과제 2

seyeon1130 2025. 2. 25. 21:41

라이브 세션 과제

 

1번

조건1) 서버별, 월별 게임계정id 수를 중복값 없이 추출해주세요. 월은 첫 접속일자를 기준으로 계산해주세요. 월은 yyyy-mm의 형태로 추출해주세요.
select u.serverno, date_format(date(date),'%Y-%m') month, count(logid)
from sprta.users u 
group by 1,2;

 

 

2번

조건1) group by 를 활용하여 first_login_date별 게임캐릭터수를 중복값 없이 구하고,

조건2) having 절을 사용하여 그 값이 10개를 초과하는 경우의 첫 접속일자 및 게임캐릭터id 개수를 추출해주세요.

select date,count(distinct u.game_actor_id ) cnt_actor
from sprta.users u 
group by date
having cnt_actor >10

 

3번

조건1) group by 절을 사용하여 서버별, 유저구분(기존/신규) 게임캐릭터id수를 구해주세요. 중복값을 허용하지 않는 고유한 갯수로 추출해주세요.

조건2) 기존/신규 기준→ 첫 접속일자가 2024-01-01 보다 작으면(미만) 기존유저, 그렇지 않은 경우 신규유저

조건3) 또한, 서버별 평균레벨을 함께 추출해주세요.

select 
	serverno,
	if(date(date)<'2024-01-01', '기존유저','신규유저') users_group,
	count(distinct u.game_actor_id ) cnt_actor,
	(select avg(level) from sprta.users where serverno = u.serverno) avg_level
from sprta.users u
group by 1,2;

 

 

  • SELECT 절에서 서브쿼리를 사용 (스칼라 서브쿼리)
  • FROM 절에서 서브쿼리를 사용 (인라인 뷰)

 

더보기
더보기
더보기
스칼라 서브쿼리를 이용하면 group by를 안해도 되고, where 문에서 = 하고 묶어주면 그 컬럼에 대한 avg만 추출 가능

 

 

-> 피드백: sql문에 if문 지양하기. case when 사용하기.

-> group by에는 별칭 사용하지 말고 원문 그대로 사용하기. case문도 가능 

-> mysql에서만 having에서 별칭사용, 그러니까 웬만하면 사용하지 말기

 

4번

조건1)  문제2번을 having 이 아닌 인라인 뷰 서브쿼리를 사용하여 추출해주세요.

select  date ,cnt_actor
from (
	select date, count(distinct u.game_actor_id ) cnt_actor
	from sprta.users u 
	group by 1
	)a
where  a.cnt_actor>10;

 

5번

조건1)   레벨이 30 이상인 캐릭터를 기준으로, 게임계정 별 캐릭터 수를 중복값 없이 추출해주세요.

조건2)   having 구문을 사용하여 캐릭터 수가 2 이상인 게임계정만 추출해주세요.

조건3)  인라인 뷰 서브쿼리를 활용하여 캐릭터 수 별 게임계정 개수를 중복값 없이 추출해주세요.

select game_account_id, count(distinct game_actor_id) cnt_actor, cnt_game_account
from (
	select game_actor_id, count(distinct game_account_id) cnt_game_account,level,game_account_id
	from sprta.users
	group by game_actor_id,3,4
    ) a
where level>30
group by game_account_id,3
having cnt_actor >=2;

 

오늘 한 일

라이브 세션 강의 과제

ppt제작