두 테이블에서 원하는 값만 합치고 합계 구하기 0 1 2,303

by 수디상 [MySQL] 두 테이블 join as heidi sql dbeaver [2022.09.26 19:24:07]


두 테이블 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;

이렇게 따로 테이블 월 총 값을 뽑아도 어떻게 합칠지를 .. 모루겠습니당 ~

by pajama [2022.09.27 06:31:02]

안녕하세요. 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

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입