질문Q #16490
join한 값 뿐만 아니라 그 해당되는 테이블에 있는 값 모두 출력하고 싶습니다
AMKORDB2017-01-23 14:36:12
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문 지적 부탁드립니다.

답변5
#1 배강민 2017-01-23 14:43:20

위 쿼리가 에러없이 실행이 되나요?

IN 절 안의 서브쿼리에 select 필드가 2개라서 에러날듯한데요? 아닌가 흠

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
INNER JOIN payment as B
ON A.member_id = B.member_id

위를 원하시는게 아닌가 싶네요. 아니시라면 모르겠네요.

JOIN을 한다고 JOIN한 필드만 나오는건 아닙니다.

#2 AMKORDB 2017-01-23 14:57:26
member 테이블에 총 12 행 이 있는데 
문제는 1행만 나옵니다 ㅠ,ㅠ
#3 배강민 2017-01-23 15:01:48

가 열이 아니라 행인건가요.

payment과 매칭되는것만이 아니라 다른것도 나오고 싶으신거죠?

그렇다면 left join을 알아보셔요

#4 AMKORDB 2017-01-23 15:02:34

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행만 나오네요 ㅠ,ㅠ

#5 kaido 2017-01-23 16:33:58
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 절에서 사용 하는 서브 쿼리에 대해서 한번 알아보시면 풀리실 것입니다.