▶ 학습내용
문제1)
select*
from basic.payment
select gb,count(distinct game_account_id) as usercnt
from
(
select u.game_account_id,
case when p.game_account_id is not null then '결제함'
else'결제안함' end as gb
from basic.users as u left join basic.payment as p on u.game_account_id=p.game_account_id
) as a
group by gb
▶ 어떤테이블을 기준으로 두고 조인을 할 것인지를 생각해야 하고 ,
payment 테이블에 계임계정이 있으면 결제함 으로 하는 것이 조건이다.
join왼쪽이 기준 테이블이 되며 left join 하면 왼쪽에있는 모든 행이 출력되는것이다.
그래서, 모든 유저 정보가 있는 users테이블을 기준으로 조인하면 결제여부를 조건으로 하는 새로운 컬럼을 출력 할 수 있게된다.
만약 payment 테이블을 기준으로 한다면 payment는 결제를 한 유저들의 테이블이기 때문에 결제 안한 사람들을 조회 할 수 가 없다. 왜냐하면 결제는 했는데 users에 계정이 없다면 데이터 불일치 이기때문에 기준은 users테이블이 되어야한다!