전달 데이터 비교해서 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가 아니라면
집계용 테이블 하만 장만?하시는 것이 좋을 듯합니다.