데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요. 프로젝트를 진행하다가 궁금한것이 있어 글을 남깁니다.
다른게 아니라 매출 sum 하는 쿼리입니다.
먼저 설명보다는 데이터를 가지고 설명을 하겠습니다.
데이터는 아래와 같이 있습니다.
ID | amount(매출) |date(날짜) |price(공급가액) |start_dt(계약시작일자) |end_dt(계약종료일자)
AAA |3333.3333 |20180828 |300,000 |20180828 |20181125
AAA |3333.3333 |20180829 |300,000 |20180828 |20181125
AAA |3333.3333 |20180830 |300,000 |20180828 |20181125
AAA |3333.3333 |20180831 |300,000 |20180828 |20181125
AAA |3333.3333 |20180901 |300,000 |20180828 |20181125
AAA |3333.3333 |20180902 |300,000 |20180828 |20181125
AAA |3333.3333 |20180903 |300,000 |20180828 |20181125
AAA |3333.3333 |20180904 |300,000 |20180828 |20181125
.
.
.
.
이렇게 있습니다.
쿼리로 하면
이 데이터를 월별로 sum을 하면
ID | amount(매출) |date(날짜0 |price(공급가액) |start_dt(계약시작일자) |end_dt(계약종료일자)
AAA |13,333 |201808 |300,000 |20180828 |20181125
AAA |100,000 |201809 |300,000 |20180828 |20181125
AAA |103,333 |201810 |300,000 |20180828 |20181125
AAA |83,333 |201811 |300,000 |20180828 |20181125
이렇게 나옵니다.
공급가액은 300,000원이고, 원본 data에 내용을 기반으로 amount를 전체 sum 하면 300,000원이 나옵니다.
하지만 월별로 group by로 정렬했을때의 값은 299,999원이 나옵니다.
이럴때 값을 맞춰 줘야합니다.
기존)
ID | amount(매출) |date(날짜0 |price(공급가액) |start_dt(계약시작일자) |end_dt(계약종료일자)
AAA |83,333 |201811 |300,000 |20180828 |20181125
변경)
ID | amount(매출) |date(날짜0 |price(공급가액) |start_dt(계약시작일자) |end_dt(계약종료일자)
AAA |83,334 |201811 |300,000 |20180828 |20181125
머리로 생각했을때, 월별로 나온 amount(매출)와(과) price(공급가액)를(을) 비교했을때, price(공급가액) 보다 작으면 1을 더해야 한다.
하지만 쿼리로 작성하기에는 어렵더라구요...
어떻게 해야 할까요??
Comment 1
-
난나야78
2019.01.10 14:09
SELECT ID
, CASE WEHN SUM(AMOUNT) < PRICE THEN SUM(AMOUNT) +1 ELSE SUM(AMOUNT) END AS SUM_AMOUNT
, SUBSTRING(DATE, 1, 6) AS DT
, PRICE
, START_DT
, END_DT
FROM AMOUNT_TABLE
GROUP BY ID
, SUBSTRING(DATE, 1, 6)
, PRICE
, START_DT
, END_DT;
이렇게 해보면 되지 않을까 싶네요.