내배캠_Data_3기/SQL

[코딩연습]라이브세션SQL_3회차 문제

케일라(Data_3기) 2024. 7. 1. 20:13

 

문제 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) as min_pay_amt

from basic.payment

group by pay_type

having min_pay_amt>=500

 

문제3

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

더보기

select serverno, count(distinct P.game_account_id)
from basic.users U left join basic.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 game_account_id, actorcnt,sumamount
from 
(select U.game_account_id,
count(distinct U.game_actor_id) as actorcnt,
sum(P.pay_amount) as sumamount
from basic.users U inner join basic.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) a
where actorcnt>=2
order by sumamount desc

 

문제5

  • 게임 계정 ID(game_account_id)별로 마지막으로 접속한 날짜와 그 날짜의 상세 로그 정보를 조회하세요. ‘마지막 접속한 날짜’를 의미하는 컬럼의 컬럼명은 *last_login_date* 로 지정해주세요.
  • 여기서 마지막 접속 날짜는 가장 최근의 날짜를 의미하며, 사용자의 상세 로그는 logid, ip_addr, date, game_actor_id를 포함해야 합니다.
  • 결과는 사용자 구분 없이 최근에 접속한 순서로 정렬되어야 합니다.
더보기

select U.game_account_id, a.last_login_date, U.logid, U.ip_addr, U.date,U.game_actor_id 
from basic.users U left join 
(select game_account_id, max(date) last_login_date
from basic.users 
group by game_account_id 
) a 
on U.game_account_id=a.game_account_id
order by 5 desc