데이터분석 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 절에서 서브쿼리를 사용 (인라인 뷰)
-> 피드백: 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제작