SharedIT | 묻고 답하기(AMP)

직전 6개월 매출 누적 쿼리

datetime     custID   paid_money
20190101 a1     10,000

20190101        a2        10,000

20190102        a2          5,000

이런식으로 일자별, 고객별로 테이블에 값이 있습니다.


해당 테이블에서 1월의 실적은  18년 7월 ~ 18년 12월

2월의 실적은 18년 8월 ~ 19년 1월 이런식으로 하여

매출 5만원 단위로 집계를 하려고 합니다.

이렇게 구하려고 합니다.

어떻게 쿼리를 짜야할까요?

Tags : 태그가 없습니다.

2개의 답변이 있습니다.

wansoo
  0 추천 | 약 4년 전

DBMS 종류에 따라 사용할 수 있는 함수 등에 차이가 있겠고요.

그리고, 18년 8월은 2019년 1월 실적에도 잡히고, 2019년 2월 실적에도 잡히게 되는 건가요??



조금 이상하긴 하지만...

오라클을 이용해서,

현재달 실적에 이전 6개월 전부터 앞개월까지 누적하는 쿼리를 2019년 1월 실적에 대해서만 만들어 본다면...



var year_month varchar;
exec :year_month := '201901'; -- 누적 실적을 알고 싶은 월을 지정함
select decode (clss, 0, '5만이하', 1, '5만이상', 2, '10만이상', '15만이상') 구분, count (*) 고객수, sum (paid_money) 매출
from (
select round (paid_money/50000) clss, custID, paid_money,
months_between (to_date ( :year_month, 'yyyymm'), to_date (substr (datetime,1,6),'yyyymm')) months
from table명
) a
where where a.months between 1 and 6

group by a.clss

order by a.clss



Test는 해 보지 않아 일부 오류가 있을 수는 있습니다.



여러 월에 대한 실적으로 옆으로 쭉~ 붙여 나오게 하려면 쿼리가 많이 복잡해 질것 같고요.

각 월에 대한 실적을 산출해서 Excel 등을 이용해서 정리해 주는게 오히려 간편할 거라 보여 지네요.

wansoo | 약 4년 전

함수명 다음에 ( 를 바로 붙여 적으면 글이 올라 가지 않아서 함수명과 ( 사이에 빈칸을 모두 하나씩 넣어서 작성했습니다.
빨간신발
  0 추천 | 약 4년 전

select left(datetime, 6) as '년월'
, count(*) as '전체고객수'
, sum(paid_money) as '전체매출'
, sum(case when paid_money >= 100000 then 1 else 0 end) as up10c
, sum(case when paid_money < 100000 and paid_money >= 50000 then 1 else 0 end) as up5c
, sum(case when paid_money < 50000 then 1 else 0 end) as down5c
, sum(case when paid_money >= 100000 then paid_money else 0 end) as up10p
, sum(case when paid_money < 100000 and paid_money >= 50000 then paid_money  else 0 end) as up5p
, sum(case when paid_money < 50000 then paid_money  else 0 end) as down5p
  from 테이블
group by left(datetime, 6)


=========================


저 쿼리를 서브쿼리로 하셔서 한번더 작업해서 원하는 양식으로 뽑으셔되 되고...

아니면 엑셀에서 수작업으로 정리한번 해주셔도 됩니다.