테스트 사이트 - 개발 중인 베타 버전입니다

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

2년 전 조회 1,394

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개

채택된 답변
+20 포인트

- DDL

</p>

<p>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

);</p>

<p>

 

- DML

</p>

<p>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)</p>

<p>     ,('B', 0, 2022, 12)

     ,('B', 1000000, 2023, 1)</p>

<p>     ,('C', 200000, 2022, 10)

     ,('C', 200000, 2022, 11)

     ,('C', 200000, 2022, 12)

     ,('C', 200000, 2023, 1)

     ,('C', 700000, 2023, 3)

     ,('C', 300000, 2023, 3)

;</p>

<p>

 

- SELECT

</p>

<p>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 </p>

<p>    -- 2022-12 ~ 2023-01

    --    a.wr_3 = 2023 

    -- AND a.wr_4 = 1</p>

<p> </p>

<p>    -- 2023-02 ~ 2023-03</p>

<p>        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

;</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

감사합니다 데이터 잘 정리됩니다.
다른분들도 비교합산 쿼리 하실 때 도움이 될 소스라 생각합니다.

댓글을 작성하려면 로그인이 필요합니다.

1회성 query가 아니라면

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

조언 감사합니다. 이부분도 고려하여 적용의견 내보겠습니다.

댓글을 작성하려면 로그인이 필요합니다.

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개

감사합니다. 이렇게 생각하면 되는거였네요!!!
더미 테이블은 생각하질 못했었습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고