- 조건1) 알맞은 join 방식을 사용하여 users 테이블을 기준으로, payment 테이블을 조인해주세요.
조건2) case when 구문을 사용하여 결제를 한 유저와 결제를 하지 않은 게임계정을 구분해주시고, 컬럼이름을 gb로 지정해주세요.
조건3) gb를 기준으로 게임계정수를 추출해주세요. 컬럼 이름은 usercnt로 지정해주시고, 결과값은 아래와 같아야 합니다.
- SELECT
CASE
WHEN p.game_account_id IS NULL THEN '결제안함'
ELSE '결제함'
END AS gb,
COUNT(distinct u.game_account_id) AS usercnt
FROM marketer_sql_users u
LEFT JOIN marketer_sql_payment p ON u.game_account_id = p.game_account_id
GROUP BY 1
- 조건1) users 테이블에서 서버번호가 2 이상인 데이터와 payment 테이블에서 결제방식이 CARD 모두를 만족하는 경우를 알맞은 방식으로 join 해 주세요. payment 테이블의 매출 금액이 중복되는 것을 방지하기 위해 모든 값을 고유하게 추출해야 합니다.
조건2) 조인한 결과를 바탕으로 users 테이블의 game_account_id 를 기준으로 game_actor_id수를 중복값없이 세고 컬럼 이름을 actor_cnt로 지정해주세요. 또한 pay_amount 값을 더해주시고, 컬럼 이름을 sumamount로 지정해주세요.
조건3) having 을 사용하지 않고, 인라인 뷰 subquery 사용으로 actor_cnt수가 2 이상인 경우만 추출해주세요. 그리고 sumamount를 기준으로 내림차순 정렬해주세요.
결과값은 아래와 같아야 합니다. 전체결과 중 일부입니다.
- SELECT game_account_id,
actor_cnt,
sumamount
FROM (
SELECT
u.game_account_id,
COUNT(DISTINCT u.game_actor_id) AS actor_cnt,
SUM(p.pay_amount) AS sumamount
FROM marketer_sql_users u
INNER JOIN marketer_sql_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
) sumamount
WHERE actor_cnt >= 2
ORDER BY sumamount DESC
- 조건1) user 테이블에서 game_account_id, first_login_date, serverno 를 추출한 결과와
조건2) payment 테이블에서 game_account_id 별 가장 마지막 결제일자를 찾고 그 컬럼이름을 date2로 지정해주세요. 그 다음 inner join 을 진행해주세요. 다만, 첫 접속일자보다 마지막 결제일자가 큰 경우만 추출해주세요.
조건3) 조인 결과를 바탕으로 마지막 결제일자-첫 접속일자 를 구해주세요. 그리고 컬럼이름을 diffdate로 설정해주세요. 두 날짜의 형식은 같아야 합니다.
조건4) 인라인 뷰 subquery 를 이용하여 서버별 평균 diffdate를 구해주시고, 컬럼이름을avgdiffdate로 설정해주세요. 해당컬럼은 정수 형태로 출력되어야 합니다.
조건5) 조건절에 diffdate 값이 10일 이상인 경우를 필터링해주세요. 그리고 서버번호를 기준으로 내림차순 정렬해주세요. 결과값은 아래와 같아야 합니다. 전체결과 중 일부입니다.
- SELECT
a.serverno,
ROUND(AVG(a.diffdate)) AS avgdiffdate
FROM (
SELECT
u.game_account_id,
u.first_login_date,
u.serverno,
p.date2,
DATEDIFF(p.date2, u.first_login_date) AS diffdate
FROM marketer_sql_users u
INNER JOIN (
SELECT
game_account_id,
MAX(approved_at ) AS date2
FROM
marketer_sql_payment p
GROUP BY
1
) p
ON u.game_account_id = p.game_account_id
WHERE p.date2 > u.first_login_date
) a
WHERE a.diffdate >= 10
GROUP BY 1
ORDER BY a.serverno DESC