쿼리문 질문(서브쿼리) 0 4 663

by 조지조지 [SQL Query] [2020.12.02 16:52:55]


DBㅇㅇ.jpg (36,077Bytes)
DB내용.jpg (43,538Bytes)

안녕하세요, DB 쿼리 질문 하나 남겨보려 합니다.

다름이 아니라, LOG성으로 남는 테이블인데요.

첨부 사진에서

friend_status = 'follower' 가 먼저 찍히고 

그 다음으로, friend_status = 'friend' 가 되는 테이블입니다.

위의 해당 조건을 충족하고, friend_mid 가 동일할 경우, count 하여 1로 수를 세는 쿼리를 짜고 싶은데 어려워서 질문을 드립니다.

 

아래는 제가 짠 쿼리인데, 해당 내용도 group by 로 D.mid 를 잡아주면 서브쿼리 returns more than 1 row에러를 보여줍니다.

어떻게 처리하면 좋을지 여쭙습니다.

 

select *,
SUM(IF(((select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'follower' and D.mid = C.mid) = (select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'friend' and D.mid = C.mid)), 1, 0)) as 'follower_friend',
       SUM(IF(((select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'follow' and D.mid = C.mid) =(select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'friend' and D.mid = C.mid)), 1, 0)) as 'follow_friend'
     -- ,SUM(IF(friend_status = 'follower', 1, 0)) as 'rcv_be_frd'
from CA_BI.TMP_CJH_A_201202 as D
where D.mid = 18290757
;

by 조지조지 [2020.12.02 17:15:40]
select *,
SUM(IF(((select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'follower' and D.mid = C.mid) = (select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'friend' and D.mid = C.mid)), 1, 0)) as 'follower_friend',
       SUM(IF(((select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'follow' and D.mid = C.mid) =(select C.friend_mid from CA_BI.TMP_CJH_A_201202 as C where C.friend_status = 'friend' and D.mid = C.mid)), 1, 0)) as 'follow_friend'
     -- ,SUM(IF(friend_status = 'follower', 1, 0)) as 'rcv_be_frd'
from CA_BI.TMP_CJH_A_201202 as D
where D.mid = 18290757
;

 


by 마농 [2020.12.02 17:48:05]

질문이나 쿼리만 봐서는 원하시는 게 뭔지 알기 어렵네요.
일단 참조할만한 쿼리 올려봅니다.
 

SELECT mid, lv, age, ct, ct_1, friend_mid
     , COUNT(CASE friend_status WHEN 'follower' THEN 1 END) cnt_follower
     , COUNT(CASE friend_status WHEN 'follow'   THEN 1 END) cnt_follow
     , COUNT(CASE friend_status WHEN 'friend'   THEN 1 END) cnt_friend
  FROM tmp_cjh_a_201202
 GROUP BY mid, lv, age, ct, ct_1, friend_mid
;

 


by 조지조지 [2020.12.02 18:58:23]

안녕하세요, 무엇보다 일단 도움을 주셔서 감사합니다.

제가 원하고자 했던 데이터는

사진에서

 

friend_status = 'follower' 이고 friend_status = 'friend' 인 사람이 동일합니다.

이 두 조건을 충족하는 경우를 count 화 하고 싶습니다.

헌데, friend_status 는 한 raw당 1개만 찍히는 데이터 구조입니다.

하여, 사진에서 보면

 

friend_mid = 7205200 인 사람은 friend_status = 'follower'

friend_mid = 7205200 인 사람의 2번째 raw가 friend_status = 'friend' 로 된 상태입니다.

하여, 두 raw에서 다른 조건일 경우 count 세는 쿼리문을 짜고 싶습니다.

 

혹시 한번만 더 도와주실 수 있으실까요..! 

감사드립니다.

 


by 마농 [2020.12.02 22:44:07]

설명만 봐서는 모르겠네요.
조건에 해당되는 예와 그렇지 않은 예가 다양하게 섞여 있는.
원본 대비 결과표 형태의 예시자료를 들어 주세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입