1) 서버별, 월별 게임계정id 수를 중복값 없이 추출해주세요. 월은 첫 접속일자를 기준으로 계산해주세요. 월은 yyyy-mm의 형태로 추출해주세요.
힌트: 월을 추출하는 방법→날짜는 string(문자열) 형식으로 저장되어 있으므로, 문자열을 자르는 함수를 사용해주시면 좋겠죠? 😃
SELECT serverno, substr(first_login_date,1,7) as m, COUNT(DISTINCT game_account_id)
from basic.users u
group by SUBSTR(first_login_date,1,7), serverno
;
⭐️ Substr: 특정 문자 뽑아줌
2. 질문하기
code:
select first_login_date, count(distinct game_actor_id)as actor_cnt
from basic.users
group by first_login_date
having count(distinct game_actor_id)>10
왜 ()를 having 뒤에 쓰는지 질문
3.
my code:
SELECT serverno,
case when first_login_date < 2024-01-01 then '기존유저'
else '신규유저' end as 'gb',
from basic.users u
-기존/신규 나눠서 개임케릭터id수, 서버별 평균레벨이 안 구해짐
answer code:
select serverno, case when first_login_date <'2024-01-01' then '기존유저'
else '신규유저' end as gb
,count(distinct game_actor_id)as actor_cnt
,avg(level)as avg_level
from basic.users
group by serverno, case when first_login_date <'2024-01-01' then '기존유저'
else '신규유저' end
4.
조건1) 문제2번을 having 이 아닌 인라인 뷰 서브쿼리를 사용하여 추출해주세요.
(subquery 좀 더 보고 한번 더 보기)
내가 쓴거:
SELECT *
from (select first_login_date, count(distinct game_actor_id)as actor_cnt
from basic.users u
where count(DISTINCT game_actor_id >10)) as A
group by first_login_date
답:
select *
from( select first_login_date, count(distinct game_actor_id)as actor_cnt
from basic.users
group by first_login_date
)as a
where actor_cnt>10
왜 ?를 쓰냐?
() 안에 어떠한 것들을 써야 하는지 모르겠다
5.
'SQL 문제들' 카테고리의 다른 글
SQL 문제(Case, Join) (0) | 2024.11.21 |
---|---|
SQL 문제들(join) (1) | 2024.11.20 |
SQL 문제들(join 문제들) (0) | 2024.11.19 |
sql 문제1 (0) | 2024.11.16 |