내배캠(개인과제)/SQL

[라이브세션] 데이터와 친해지는 SQL 3회차

신짜린 2024. 6. 27. 22:36

문제 1

 payment 테이블에서 pay_type이 ‘MONEY’이고 pay_amount가 500,000 이상인 데이터의 개수를 count 해주세요. 결과값은 아래와 같아야합니다.

select count(*)
from payment
where pay_type = 'MONEY' and pay_amount >= 500000

 

문제 2

 group by 와 having 절을 사용하여 pay_type 별 최소 pay_amount를 구하고, 그 값이 500이상인 경우를 추출해주세요. 결과값은 아래와 같아야합니다.

select pay_type
	, min(pay_amount) min_pay_amt
from payment p
group by pay_type
having min_pay_amt >= 500

 

문제 3

 각 서버(serverno)별로 결제한 사용자의 수를 계산하세요. 서버 번호와 해당 서버에서 결제한 사용자 수를 반환해야 합니다. 사용자 수는 중복 제거한 상태로 계산해주세요. 결과값은 아래와 같아야합니다. (순서 상관X)

select serverno
	, count(distinct u.game_account_id)
from users u inner join payment p
	on u.game_account_id = p.game_account_id
group by serverno

 

문제 4

 user 테이블에서 서버번호(serverno)가 2 이상인 데이터와 payment 테이블에서 결제 수단(pay_type)이 CARD 인 경우를 join해 주시고

 게임계정id(game_account_id)별로 게임캐릭터id(game_actor_id)의 갯수를 중복값없이 세어주시고, actorcnt 으로 컬럼명을 명시해주세요.

 게임계정id(game_account_id) 별 결제금액(pay_amount) 의 합을 출력해주시고, sumamount 으로 컬럼명을 명시해주세요.

 최종적으로 actorcnt가 2 이상인 경우만 추출하고, sumamount 의 내림차순으로 정렬해주세요.

select u.game_account_id
	, count(distinct u.game_actor_id) actorcnt
	, sum(pay_amount) sumamount
from users u inner join payment p
	on u.game_account_id = p.game_account_id
where u.serverno >= 2
	and p.pay_type = 'card'
group by u.game_account_id
having actorcnt >= 2
order by sumamount desc

 

문제 5

 게임 계정 ID(game_account_id)별로 마지막으로 접속한 날짜와 그 날짜의 상세 로그 정보를 조회하세요. ‘마지막 접속한 날짜’를 의미하는 컬럼의 컬럼명은 *last_login_date* 로 지정해주세요.

 여기서 마지막 접속 날짜는 가장 최근의 날짜를 의미하며, 사용자의 상세 로그는 logid, ip_addr, date, game_actor_id를 포함해야 합니다.

 결과는 사용자 구분 없이 최근에 접속한 순서로 정렬되어야 합니다.

select game_account_id
	, date last_login_date
	, logid
	, ip_addr
	, date
	, game_actor_id
from users
order by date desc