select substring(a.confirm_day,1,4)+'년'+substring(a.confirm_day,5,2)+'월' AS 년월,
sum(a.buyer_fee+a.seller_fee) as 총중개수수료,sum(b.j_bang+b.d_bang+b.office_cost) AS 총지출,
sum(a.buyer_fee+a.seller_fee)-sum(b.d_bang+b.j_bang+b.office_cost) AS 순수익
from confirm a join outlay b on substring(a.confirm_day,1,6)=substring(b.YM,1,6)
group by substring(a.confirm_day,1,4)+'년'+substring(a.confirm_day,5,2)+'월';
이 쿼리문 실행 시 아래 값이 나오는데
confirm 테이블이고
outlay 테이블입니다.
문제점은 조인 시 201802 계약부분이 3개이다보니 j_bang+d_bang+office_cost 부분이 3번 중복되어 총 지출이 3배가 되어나오고
마찬가지로 201803부분은 2배가 되어 나옵니다.
해결방법이있는지 아니면 보다 좋은 쿼리문이 있는지 궁굼합니다 ㅠ
테이블 내에 년월 컬럼를 하나 추가 및 적용하셔서 GROUP BY 하시면 더 효율적이라 생각됩니다..
OUTLAY 테이블에는 컬럼은 YM인데 데이터는 날짜군요!?
OUTLAY 테이블이 YM 의 년월 기준으로 1:1인 데이터 구조라는 가정 하에..
-----------------------------------------------------------------------------------
SELECT
LEFT(A.YM,4) + '-' + RIGHT(A.YM,2) as 년월
, (A.BUYER_FEE_SUM + A.SELLER_FEE_SUM) as 총중개수수료
, (B.J_BANG + B.D_BANG + B.OFFICE_COST) as 총지출
, (A.BUYER_FEE_SUM + A.SELLER_FEE_SUM - B.J_BANG - B.D_BANG - B.OFFICE_COST) as 순수익
FROM (
SELECT LEFT(CONFIRM_DAY,6) YM
, SUM(BUYER_FEE) BUYER_FEE_SUM
, SUM(SELLER_FEE) SELLER_FEE_SUM
FROM CONFIRM
GROUP BY LEFT(CONFIRM_DAY,6)
) A
LEFT OUTER JOIN OUTLAY B
ON A.YM=LEFT(B.YM,6)
-----------------------------------------------------------------------------------
만약, OUTLAY가 년월에 1:N 인 데이터 구조이면 GROUP BY + SUM 하시면 되겠죠
도움이 되셨기를..