문제1 - 집계함수의 활용 조건1) 서버별, 월별 게임계정id 수를 중복값 없이 추출해주세요. 월은 첫 접속일자를 기준으로 계산해주세요. 월은 yyyy-mm의 형태로 추출해주세요.
| 힌트: 월을 추출하는 방법→날짜는 string(문자열) 형식으로 저장되어 있으므로, 문자열을 자르는 함수를 사용해주시면 좋겠죠? 😃 |
|---|
문제2 - 집계함수와 조건절의 활용
조건1) group by 를 활용하여 first_login_date별 게임캐릭터수를 중복값 없이 구하고,
조건2) having 절을 사용하여 그 값이 10개를 초과하는 경우의 첫 접속일자 및 게임캐릭터id 개수를 추출해주세요.
문제3 - 집계함수와 조건절의 활용2
조건1) group by 절을 사용하여 서버별, 유저구분(기존/신규) 게임캐릭터id수를 구해주세요. 중복값을 허용하지 않는 고유한 갯수로 추출해주세요.
조건2) 기존/신규 기준→ 첫 접속일자가 2024-01-01 보다 작으면(미만) 기존유저, 그렇지 않은 경우 신규유저
조건3) 또한, 서버별 평균레벨을 함께 추출해주세요.
🔥**문제4 - SubQuery의 활용**
2번 문제를 having 이 아닌 인라인 뷰 subquery 를 사용하여, 추출해주세요.
🔥🔥문제5 - SubQuery의 응용
조건1) 레벨이 30 이상인 캐릭터를 기준으로, 게임계정 별 캐릭터 수를 중복값 없이 추출해주세요.
조건2) having 구문을 사용하여 캐릭터 수가 2 이상인 게임계정만 추출해주세요.
조건3) 인라인 뷰 서브쿼리를 활용하여 캐릭터 수 별 게임계정 개수를 중복값 없이 추출해주세요.
1번.
SELECT serverno,
substr(date,1,7) MONTHLY,
COUNT(distinct game_account_id) cnt_acc_id
FROM basic.users
GROUP BY serverno,MONTHLY
2번.
SELECT date,
COUNT(DISTINCT game_actor_id) cnt_act_id
FROM basic.users
GROUP BY date
HAVING cnt_act_id > 10
3번.
SELECT serverno,
CASE WHEN DATE_FORMAT(date,'%Y-%m-%d') > '2024-01-01' THEN '기존유저'
ELSE '신규유저'END AS 유저구분,
COUNT(DISTINCT game_actor_id) AS cnt_character,
AVG(level) avg_level
FROM basic.users
GROUP BY 1, 2
4번.
SELECT A.date,
A.cnt_act
FROM
(
SELECT date,
COUNT(DISTINCT game_actor_id) AS cnt_act
FROM basic.users
GROUP BY date
) AS A
WHERE A.cnt_act > 10
5번.
SELECT A.cnt_act,
COUNT(DISTINCT A.game_account_id) cnt_acc
FROM
(
SELECT game_account_id,
COUNT(game_actor_id) AS cnt_act
FROM basic.users
WHERE level >= 30
GROUP BY game_account_id
HAVING COUNT(game_actor_id) >= 2
) AS A
GROUP BY A.cnt_act