안녕하세요 쿼리 질문을 드리고자 합니다.(첫행의 가격을 가지고 와서 계산) 0 8 1,216

by 마르스헤븐 [SQL Query] [2022.05.18 15:03:35]


안녕하세요. 쿼리 질문을 드리고자 합니다. 

아래의 표와 같이 잔금 표시를 할려고 하는데  

가격 컬럼의 첫행의 값을 가지고 와서 입금받은 내역이 있으면 빼주어서 잔금 처리를 하고자 하는데 어떻게 해야 할지 모르겠습니다.

가르침을 주시면 정말 감사하겠습니다.

 

날짜 가게명 가격 입금 잔금 memo
20220509 abc 141477 0 141477 - 0  
20220509 abc 0 9000 132,477
※ 가격 - 입금
(141477 - 9000)
1234
20220509 abc 0 60000 72,477
※ 가격 - 입금
  ( 132,477  - 60000)
4567

 

디비 버전은 PostgreSQL 10.7 입니다. 

by 마르스헤븐 [2022.05.18 15:43:10]

over  를 써서 해결했습니다. 구루비 사이트가 있어서 너무 든든한것 같습니다. 

감사합니다.


by 마농 [2022.05.18 16:25:15]

분석함수 이용하시면 되는데
다만 위 예시자료에는 3개 행의 순서를 구분할 수 있는 항목이 보이질 않네요.
정렬 순서를 구별할 수 있는 항목이 필요합니다.


by 마르스헤븐 [2022.05.19 08:37:39]

마농님 죄송한데 흑시 분석함수를 이용하는 방법을 좀 알수 있을까요? 

NO 아이디 날짜 가게명 가격 입금 잔금 memo
1 1 20220509 abc 141477 0 141477 - 0  
2 2 20220509 abc 0 9000 132477
(※ 가격 - 입금
(141477 - 9000))
1234
3 4 20220509 abc 0 60000 72477
(※ 가격 - 입금
  ( 132,477  - 60000))
4567

by 마농 [2022.05.19 09:37:57]

사용셨다는 OVER 구문이 분석함수 구문입니다.
분석함수 사용을 위해서는 그룹기준과 정렬기준이 필요합니다.
SUM(가격 - 입금) OVER(PARTITION BY 그룹기준 ORDER BY 정렬기준) 잔금
그룹은 가게명으로 묶으면 되는 것인지?
추가 그룹핑 기준이 있는지? 날짜라던가?
정렬은 어떤 기준으로 해야 하는지? NO 순인지?


by 마르스헤븐 [2022.05.19 09:47:55]

그룹핑 날짜이고 정렬은 no 순서 입니다.

중간에 가격이 있는 경우도 필요한데 어떻게 처리를 해야 할지 모르겠습니다. 

NO 아이디 날짜 가게명 가격 입금 잔금 memo
1 1 20220509 abc 141477 0 141477 - 0  
2 2 20220509 abc 0 9000 132477 1234
(※ 가격 - 입금
(141477 - 9000))
3 4 20220509 abc 0 60000 72477 4567
(※ 가격 - 입금
  ( 132,477  - 60000))
4 5 20220519 abc 50000 60000 62477  
(※ 가격 - 입금
  ( 72477 + 50000 - 60000))
5 6 20220519 abc 0 60000 2477  
(※ 가격 - 입금
  ( 62477  - 60000))

 

 


by 마농 [2022.05.19 10:02:57]

SUM(가격 - 입금) OVER(PARTITION BY 날짜 ORDER BY no) 잔금
SUM(가격 - 입금) OVER(PARTITION BY 가게명, 날짜 ORDER BY no) 잔금 -- 후보1
SUM(가격 - 입금) OVER(PARTITION BY 가게명 ORDER BY 날짜, no) 잔금 -- 후보2
SUM(가격 - 입금) OVER(ORDER BY 날짜, no) 잔금 -- 후보3
날짜로 그룹핑 한다는게 좀 이상해서 여러 후보들을 적어 봤습니다.


by 마르스헤븐 [2022.05.19 10:09:04]

항상 가르침을 주셔서 너무 감사합니다. 오늘 하루도 행복한 하루 되세요 마농님


by 마농 [2022.05.19 10:20:21]

다시 보니 날짜가 바뀌는데도 금액이 유지되는 걸 보면
날짜가 그룹 기준이 아닌게 분명하네요.
후보군들 중에 선택하셔야 할 것 같습니다.
기준이 뭔지 명확해야 합니다.

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