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.판매채널;
까지는 했지만 '총 취소 건수' 나 '총 반품 건수' 등은 서브쿼리(?)같은 것을 이용해서 값을 가져와야할 것 같은데 잘 모르겠습니다 ㅠ.
( '총 구매수량'이나 '총 거래액'은 조건절없는 값들이라 가져왔지만 나머지 가져올 추출해야할 컬럼들은 '조건'(총 사용된 건 / 총 미사용된 건...)들이 있는데 어떻게 가져와야하나요?)
감사합니다.
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.판매채널; 이런거 원하시는건가요?
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가 없군용.)
답변감사드립니다!
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 문으로 해보세요