두 테이블 income, expense가 있습니다.
CREATE TABLE income(
my_date date NULL,
price numeric NULL
);
CREATE TABLE expense(
my_date date NULL,
price numeric NULL
);
두 테이블에 값을 아래 예시 처럼 넣고
INSERT INTO expense(my_date, price)
values ('2021-01-01', 20000),
('2021-01-01', 20000),
('2021-04-01', 20000),
('2021-05-01', 20000),
('2021-06-01', 20000),
('2021-06-01', 20000),
('2021-11-01', 20000),
('2021-11-01', 20000),
('2021-12-01', 20000),
('2022-01-01', 20000);
INSERT INTO income(my_date, price)
values ('2021-01-01', 100000),
('2021-01-01', 100000),
('2021-03-01', 100000),
('2021-03-01', 100000),
('2021-03-01', 100000),
('2021-05-01', 100000),
('2021-05-01', 100000),
('2021-05-01', 100000),
('2021-08-01', 100000),
('2021-08-01', 100000),
('2021-12-01', 100000);
두 테이블을 이용해서 아래 예와 같이 뽑고 싶습니다.
두 테이블의 월별 총 합계에서 total은 income총 합계 - expense총 합계 이고, total_plus는 total값을 계속 해서 합하는 것입니다.
my_date | income_sum | expense_sum | total | total_plus |
2021-01 | 200000 | 60000 | 140000 | 140000 |
2021-03 | 300000 | 0 | 300000 | 440000 |
2021-04 | 0 | 20000 | -20000 | 420000 |
2021-05 | 300000 | 20000 | 280000 | 700000 |
2021-06 | 0 | 40000 | -40000 | 660000 |
2021-08 | 200000 | 0 | 200000 | 860000 |
2021-11 | 0 | 40000 | -40000 | 820000 |
이런 식으로 뽑고싶은데 어떻게 해야할지를 모르겠습니다..
두 테이블을 합치는 것도 문제이고
따로 월 총 값을 뽑기는했는데 어떻게.. 합칠지를..
ex) 아래와 같이 해보았습니다.
SELECT DATE_FORMAT(my_date, '%Y-%m') my_date, SUM(price) AS income_sum FROM income GROUP BY my_date;
SELECT DATE_FORMAT(my_date, '%Y-%m') my_date, SUM(price) AS expense_sum FROM expense GROUP BY my_date;
이렇게 따로 테이블 월 총 값을 뽑아도 어떻게 합칠지를 .. 모루겠습니당 ~
안녕하세요. union all 과 sum over를 사용했습니다. mysql이 sum over 함수를 지원하지 않는 버전이라면 다른 방식으로 해야할것 같습니다.
select dt, sum(income) income_sum, sum(expense) expense_sum, sum(income) - sum(expense) total, sum(sum(income) - sum(expense)) over (order by dt) total_plus from (select DATE_FORMAT(my_date, '%Y-%m') dt, price income, 0 expense from income union all select DATE_FORMAT(my_date, '%Y-%m') dt, 0, price from expense) t group by dt