순차적으로 잔액계산 0 1 1,950

by 밍밍밍밍 [MySQL] mysql [2020.08.06 20:23:50]


안녕하세요.

순차석으로 잔액계산을 하려고합니다.

organ = 기관

income = 입금

outcome=출금

janak = 잔액

하나의 로우에 입금/출금중 하나만 등록가능합니다.

organ income outcome janak
A 10000 0 10000
B 0 5000 5000
C 3000 0 8000

 

표처럼 잔액을 계산하고 싶어서 쿼리를 짜는도중 궁금한사항이 생겼습니다.

SELECT 
        no,
        organ,
       income,
       outcome,
        (@NUM := @NUM + income - outcome) janak
  FROM se_account, (SELECT @NUM := 0) R
 WHERE 1 = 1
 order by no desc
 LIMIT 0, 10

 

1. 정렬을 desc로 했을때 잔액계산이 거꾸로 됩니다.

2. 리스트에 페이징을 하려고 limit를 썼을때 전체잔액으로 계산되게 할수있나요?

 

by 마농 [2020.08.07 08:19:31]
-- MySQL 8.0 이상 버전이라면? 분석함수 사용하시면 되구요.
SELECT no
     , organ
     , income
     , outcome
     , SUM(income - outcome) OVER(ORDER BY no) janak
  FROM se_account
 WHERE 1 = 1
 ORDER BY no DESC
 LIMIT 0, 10
;
-- MySQL 8.0 미만 버전이라면? 인라인뷰를 통해 우선 잔액을 구하시면 됩니다.
SELECT *
  FROM (SELECT no
             , organ
             , income
             , outcome
             , (@num := @num + income - outcome) janak
          FROM se_account
             , (SELECT @num := 0) r
         WHERE 1 = 1
         ORDER BY no
        ) a
 ORDER BY no DESC
 LIMIT 0, 10
;

 

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