sql join 질문...

sql join 질문...

QA

sql join 질문...

답변 1

본문


        select a.mb_id, b.mb_id, count(*) as cnt , sum(a.wr_31) as tot
          from g5_write_cscenter a
                   inner  join g5_write_csorder b on a.mb_id = b.mb_id
         where a.wr_29 between '{$stx1}' and '{$stx2}' and a.wr_50 like '%{$stx7}%'
         group by a.mb_id, b.mb_id ORDER BY tot DESC

이 값과 


        select a.mb_id, b.mb_id, count(*) as cnt , sum(a.wr_31) as tot
          from g5_write_cscenter a
                   inner  join g5_member b on a.mb_id = b.mb_id
         where a.wr_29 between '{$stx1}' and '{$stx2}' and a.wr_50 like '%{$stx7}%'
         group by a.mb_id, b.mb_id ORDER BY tot DESC

 

의 as tot 값이 틀린데...

이유를 아시는 분 계신가요?

 

회원member  join 값과 g5_write_csorder 의 join 값이 틀려서...

제가 이해를 잘못하고 있나 싶어서 질문드립니다.

 

어차피 둘다 g5_write_cscenter의 wr_31 합산 금액이 아닌가요?

 

        $result = sql_query($sql, TRUE);
        while ($row = sql_fetch_array($result)) {

 

}

로 돌리고 있습니다.

이 질문에 댓글 쓰기 :

답변 1

둘다 g5_write_cscenter 테이블의 wr_31의 합산금액은 맞지만

합산을 위한 추출조건이 다르네요

join 테이블이 

첫번째는 g5_write_csorder

두번째는 g5_member

 

테이블명으로 추론해서 설명하면

첫번째는  주문자중에서 센터에 포함된 사용자가 조건이고

두번째는  회원전체중에서 센터에 포함된 사용자가 조건이 되죠

 

따라서 합산이 일치하는경우는 회원이 둘다 동일할때만 입니다.

cscenter에서 멤버회원과 중복된
cscenter에서 csorder와 중복된 걸 검색하는게 아닌

멤버회원에서 cscenter가 포함된,
csorder 에서 cscenter가 포함된 사용자라는 말씀이시죠?



그런데 위아래를 바꿔봐도 sum 금액이 변동되는건 무엇때문인가요?


        select a.mb_name, b.mb_id, c.mb_id, count(*) as cnt , sum(b.wr_31) as totb, sum(c.wr_31) as totc
          from g5_member a
                   left join g5_write_csorder b on a.mb_id = b.mb_id
                   left join g5_write_cscenter c on a.mb_id = c.mb_id
         where b.wr_29 between '{$stx1}' and '{$stx2}' and b.wr_50 like '%{$stx7}%' and NOT b.wr_54 IN ('exchange') and NOT b.wr_7 IN ('4') and
		 c.wr_29 between '{$stx1}' and '{$stx2}' and c.wr_50 like '%{$stx7}%'
         group by a.mb_name, b.mb_id ORDER BY totb DESC


말씀하신대로...

g5_member가 포함된 cscenter
g5_member가 포함된 csorder

이렇게 바꿔봐도 금액은 맞질 않네요...

um(b.wr_31) as totb, sum(c.wr_31) as totc 이걸 맞춰야 하는데...

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 234
© SIRSOFT
현재 페이지 제일 처음으로