안녕하세요, 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
;
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 ;
질문이나 쿼리만 봐서는 원하시는 게 뭔지 알기 어렵네요.
일단 참조할만한 쿼리 올려봅니다.
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 ;
안녕하세요, 무엇보다 일단 도움을 주셔서 감사합니다.
제가 원하고자 했던 데이터는
사진에서
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 세는 쿼리문을 짜고 싶습니다.
혹시 한번만 더 도와주실 수 있으실까요..!
감사드립니다.