서브쿼리(?)를 이용하여 거래집계하는 방법 (도와주세요!) 0 4 1,839

by 쿼리냠냠 [SQL Query] 총 거래내역 총 판매건수 총 취소건 수 [2017.10.10 14:27:37]



안녕하세요.

구루비 회원님들 쿼리초보가 원하는 쿼리의 결과를 얻기위해 고수님들의 조언을 들어야 될 것 같습니다.^^
( 예제를 하면서 심화된 경우를 생각해 보았는데 쿼리를 어떻게 짜야할지 문의드려요.ㅠ)


일단 제가 원하는 쿼리는 거래내역을 집계하는 것입니다.

설명을 위해 비정규한 테이블의 컬럼을 보여드리겠습니다.

*거래내역 테이블 (orderTable)*은 파일을 참조해주세요.

원하는 컬럼들은

'판매채널'별로

/'총 구매수량건수'/'총 판매금액'/'총 취소건수'/'총 사용건수'/'총 미사용건수'/'카드인 경우의 총 판매금액'/'무통장입금 경우의 총 판매금액'
추가적으로 카드는 10% 무통장입금은 5%라는 수수료를 전제하에
/'무통장입금 경우의 총 판매금액의 5%'/'카드인 경우의 총 판매금액의 10%'/
인 컬럼을 뽑아내고싶습니다. (하나의 쿼리로 다 뽑아질까요?ㅠ)

 

현재 

SELECT SUM(ot.수량) AS '총 구매수량' , SUM(ot.판매금액) AS '총 거래액' FROM orderTable ot GROUP BY ot.판매채널;

까지는 했지만 '총 취소 건수' 나 '총 반품 건수' 등은 서브쿼리(?)같은 것을 이용해서 값을 가져와야할 것 같은데 잘 모르겠습니다 ㅠ.
( '총 구매수량'이나 '총 거래액'은 조건절없는 값들이라 가져왔지만 나머지 가져올 추출해야할 컬럼들은 '조건'(총 사용된 건 / 총 미사용된 건...)들이 있는데 어떻게 가져와야하나요?)

감사합니다.

by 랑에1 [2017.10.10 14:52:32]
SELECT SUM(ot.수량) AS '총 구매수량'
     , SUM(ot.판매금액) AS '총 판매금액'
     , SUM(DECODE(ot.상태, '취소', ot.수량, 0)) AS '총 취소건수'
     , SUM(DECODE(ot.상태, '사용', ot.수량, 0)) AS '총 사용건수'
     , SUM(DECODE(ot.상태, '미사용', ot.수량, 0)) AS '총 미사용건수'
     , SUM(DECODE(ot.결제수단, '카드', ot.판매금액, 0)) AS '카드인 경우의 총 판매금액'
     , SUM(DECODE(ot.결제수단, '무통장입금', ot.판매금액, 0)) AS '무통장입금 경우의 총 판매금액'
FROM orderTable ot GROUP BY ot.판매채널;

이런거 원하시는건가요?

 


by 쿼리냠냠 [2017.10.10 15:52:51]

SELECT 
     ot.판매채널
	 , SUM(ot.수량) AS '총 구매수량'
     , SUM(ot.판매금액) AS '총 판매금액'
     , SUM(DECODE(ot.상태, '취소', ot.수량, 0)) AS '총 취소건수'

FROM orderTable ot GROUP BY ot.판매채널;

 

 Error Code: 1582. Incorrect parameter count in the call to native function 'DECODE'    0.00023 sec

DECODE라는 에러는 내뱉내요 ㅠ... (검색해보니 mysql은 decode가 없군용.)

답변감사드립니다!
 


by 랑에1 [2017.10.10 15:57:30]
SELECT SUM(ot.수량) AS '총 구매수량'
     , SUM(ot.판매금액) AS '총 판매금액'
     , SUM(CASE WHEN ot.상태 = '취소' THEN ot.수량 ELSE 0 END) AS '총 취소건수'
     , SUM(CASE WHEN ot.상태 = '사용' THEN ot.수량 ELSE 0 END) AS '총 사용건수'
     , SUM(CASE WHEN ot.상태 = '미사용' THEN ot.수량 ELSE 0 END) AS '총 미사용건수'
     , SUM(CASE WHEN ot.결제수단 = '카드' THEN ot.판매금액 ELSE 0 END) AS '카드인 경우의 총 판매금액'
     , SUM(CASE WHEN ot.결제수단 = '무통장입금' THEN ot.판매금액 ELSE 0 END) AS '무통장입금 경우의 총 판매금액'
FROM orderTable ot GROUP BY ot.판매채널;

그럼 case 문으로 해보세요

 


by 쿼리냠냠 [2017.10.10 16:01:26]

네 방금 회원님 덕분에 CASE WHEN THEN 절을 찾아 적용해보았는데 원하는대로 되더라구요!

친절한 답변 감사드립니다! 

 

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