전달 데이터 비교해서 100만원 이상 차이나는거만 뽑고 싶습니다.

전달 데이터 비교해서 100만원 이상 차이나는거만 뽑고 싶습니다.

QA

전달 데이터 비교해서 100만원 이상 차이나는거만 뽑고 싶습니다.

본문

wr_1 : 고객명

wr_2 : 금액

wr_3 : 년도

wr_4 : 사용달

 

여분필드는 이런식으로 정의 하였고요,

고객이 하나만 구매 이력이 있는게 아니라서 구매 합산 금액을 sum(wr_2) 로 생각하고 있습니다.

2월 구매 고객이 1월 비교해서 100만원 이상 구매고객을 뽑는 쿼리를 만들고 싶습니다.

쿼리 도움좀 받을 수 있을지 해서 질문 남깁니다.

 

아래는 비교 전 쿼리를 제가 만들어보았습니다.

SELECT a.wr_1, sum(a.wr_2) as tcs FROM g5_write_client a where wr_3= '2022' and wr_4 = '02' and wr_1 != '' group by wr_1

 

SELECT b.wr_1, sum(b.wr_2) as tcs FROM g5_write_client b where wr_3= '2022' and wr_4 = '02' and wr_1 != '' group by wr_1

이 질문에 댓글 쓰기 :

답변 3

- DDL


CREATE TABLE g5_write_client (
    wr_1 varchar(50) DEFAULT NULL,
    wr_2 varchar(50) DEFAULT NULL,
    wr_3 varchar(4) DEFAULT NULL,
    wr_4 varchar(2) DEFAULT NULL
);

 

- DML


INSERT INTO g5_write_client VALUES
      ('A', 100000, 2022, 10)
     ,('A', 100000, 2022, 11)
     ,('A', 100000, 2022, 12)
     ,('A', 100000, 2023, 1)
     ,('A', 200000, 2023, 1)
     ,('A', 300000, 2023, 1)
     ,('A', 400000, 2023, 1)
     ,('A', 500000, 2023, 1)
     ,('A', 100000, 2023, 2)
     ,('A', 100000, 2023, 3)
     ,('B', 0, 2022, 12)
     ,('B', 1000000, 2023, 1)
     ,('C', 200000, 2022, 10)
     ,('C', 200000, 2022, 11)
     ,('C', 200000, 2022, 12)
     ,('C', 200000, 2023, 1)
     ,('C', 700000, 2023, 3)
     ,('C', 300000, 2023, 3)
;

 

- SELECT


SELECT 
     a.wr_1 
    ,SUM(CASE WHEN b.wr_2 IS NULL THEN 0 ELSE b.wr_2 END) month_before
    ,SUM(CASE WHEN a.wr_2 IS NULL THEN 0 ELSE a.wr_2 END) month_now 
    ,GROUP_CONCAT(DISTINCT 'before month ~ ', a.wr_3, '-' , a.wr_4) period
FROM 
    g5_write_client a
    LEFT OUTER JOIN g5_write_client b ON 
            b.wr_1 = a.wr_1
        AND b.wr_3 = DATE_FORMAT(DATE_SUB(CONCAT(a.wr_3, '-', a.wr_4, '-01'), INTERVAL 1 MONTH), '%Y')
        AND b.wr_4 = DATE_FORMAT(DATE_SUB(CONCAT(a.wr_3, '-', a.wr_4, '-01'), INTERVAL 1 MONTH), '%c')
WHERE 
    -- 2022-12 ~ 2023-01
    --    a.wr_3 = 2023 
    -- AND a.wr_4 = 1
 
    -- 2023-02 ~ 2023-03
        a.wr_3 = 2023 
    AND a.wr_4 = 3
GROUP BY
    a.wr_3, a.wr_4, a.wr_1 
HAVING 
    month_now - month_before >= 1000000
;

select 
    name, curTotal, prevTotal
from (
    select 
        wr_1 as name,
        sum(IF(wr_4 = '01', wr_2, 0)) as prevTotal,
        sum(IF(wr_4 = '02', wr_2, 0)) as curTotal
    from g5_write_client where wr_3 = '2022' group by wr_1
) as result
where curTotal - prevTotal >= 1000000

 

더미 테이블 만들어서 테스트 해봤을때 되긴하는데..

 

저런식으로 지난달 결제금액, 지난달 결제금액 구해서 묶어가지고 조건문 걸어주면 되지않을까 싶네요..

1회성 query가 아니라면

집계용 테이블 하만 장만?하시는 것이 좋을 듯합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 13
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT