안녕하세요.
순차석으로 잔액계산을 하려고합니다.
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를 썼을때 전체잔액으로 계산되게 할수있나요?
-- 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 ;