SELECT * FROM member IN ( SELECT COUNT(case when (B.state = 'ready') then 1 end ) as ready_pay , COUNT(case when (B.state = 'paid') then 1 end ) as paid_pay FROM member as A INNER JOIN payment as B ON A.member_id = B.member_id )
sql문 보시면
다른테이블와 JOIN 해서 B.state = 'ready' 한 count값 (필드 ready_pay 생성)과
B.state = 'paid' 한 count 값 (필드 paid_pay 생성)을 ON A.member_id = B.member_id 통해 출력 하게 되었습니다.
그러나 이것뿐만아니라
동시에
member 안에있는 데이터 모두 출력하고 싶은데요.
ON A.member_id = B.member_id 이 조건 때문에 나머지 데이터 값은 출력이 안되서
서브쿼리 통해 할려고 하는데 이것이 맞는것인지 알고싶습니다.ㅠ.ㅠ
고수님들 ㅠ,ㅠ sql문 지적 부탁드립니다.
가 열이 아니라 행인건가요.
payment과 매칭되는것만이 아니라 다른것도 나오고 싶으신거죠?
그렇다면 left join을 알아보셔요
SELECT
COUNT(case when (B.state = 'ready') then 1 end ) as ready_pay ,
COUNT(case when (B.state = 'paid') then 1 end ) as paid_pay,
A.*
FROM member as A
LFTE JOIN payment as B
ON A.member_id = B.member_id
이렇게 해보았지만 ㅠ,ㅠ 1행만 나오네요 ㅠ,ㅠ
SELECT COUNT(case when (B.state = 'ready') then 1 end ) as ready_pay , COUNT(case when (B.state = 'paid') then 1 end ) as paid_pay, A.* FROM member as A LFTE JOIN payment as B ON A.member_id = B.member_id GROUP BY A.member_id
group by 사용 법은 2가지 입니다.
유일성 있는 데이터를 추츨 하기 위해 중복 데이터 접어두기 방법과
합쳐진 데이터를 유일성 있게 보이기 위해 펼쳐두기 방법.
count 와 같이 사용 하면 펼치는 기능이 있습니다.
그리고 제가 지금 알려드린것은 제가 보기엔 원하시는 결과물에 정답이 아닙니다.
ready_pay 와 paid_pay 는 서브 쿼리로 해결 하셔야 할 것입니다.
select 절에서 사용 하는 서브 쿼리에 대해서 한번 알아보시면 풀리실 것입니다.
위 쿼리가 에러없이 실행이 되나요?
IN 절 안의 서브쿼리에 select 필드가 2개라서 에러날듯한데요? 아닌가 흠
SELECTCOUNT(casewhen(B.state ='ready')then1end)asready_pay ,COUNT(casewhen(B.state ='paid')then1end)aspaid_pay,A.*FROMmemberasAINNERJOINpaymentasBONA.member_id = B.member_id위를 원하시는게 아닌가 싶네요. 아니시라면 모르겠네요.
JOIN을 한다고 JOIN한 필드만 나오는건 아닙니다.