5 개의 테이블에 대한 통계를 만들고 있습니다. 나는 하나의 클라이언트 데이터로 예제를 만들었다.SQL SUM() 하위 쿼리에서 하나의 행만 계산합니다.
대출
id | status
------------
1454 | payed
지불 일정
id | loan_id | user_client_id
-----------------------------
1456 | 1454 | 3113
payment_schedule_row
id | payment_schedule_id | payment | payment_date
---------------------------------------------------
5013 | 1456 | 32 | 2013-11-06
5014 | 1456 | 32 | 2013-12-06
5015 | 1456 | 32 | 2013-01-05
5016 | 1456 | 32 | 2013-02-04
5017 | 1456 | 32 | 2013-03-06
5018 | 1456 | 32 | 2013-04-05
5019 | 1456 | 32 | 2013-05-05
5020 | 1456 | 32 | 2013-06-04
5021 | 1456 | 32 | 2013-07-04
5022 | 1456 | 32 | 2013-08-03
5023 | 1456 | 32 | 2013-09-02
5014 | 1456 | 32 | 2013-10-02
payment_schedule_cover
id | payment_schedule_id | date | sum
----------------------------------------------
2282 | 1456 | 2013-11-08 | 34
3054 | 1456 | 2013-12-07 | 40
3776 | 1456 | 2013-01-04 | 38
4871 | 1456 | 2013-02-06 | 49
5954 | 1456 | 2013-03-06 | 40
7070 | 1456 | 2013-04-25 | 49
9029 | 1456 | 2013-05-21 | 52
10377 | 1456 | 2013-06-20 | 30
10391 | 1456 | 2013-06-21 | 30
10927 | 1456 | 2013-07-07 | 60
payment_schedule_delay
id | payment_schedule_row_id | start_date | end_date | delay
----------------------------------------------------------------
1135 | 5013 | 2013-11-07 | 2013-11-08 | 0.07
1548 | 5014 | 2013-12-07 | 2013-12-07 | 0.03
2628 | 5016 | 2014-02-05 | 2014-02-06 | 0.01
그리고 쿼리는 다음 쿼리에 대한
SELECT period, loan_sum, covers, delay
FROM
(SELECT MAX(EXTRACT(YEAR_MONTH FROM psc.date)) AS period,
(SELECT SUM(psr2.payment) FROM payment_schedule_row AS psr2 WHERE psr.payment_schedule_id = psr2.payment_schedule_id) AS loan_sum,
(SELECT SUM(psc2.sum) FROM payment_schedule_cover AS psc2 WHERE psc.payment_schedule_id = psc2.payment_schedule_id) AS covers,
(SELECT SUM(psd2.delay) FROM payment_schedule_delay AS psd2 WHERE psr.id = psd2.payment_schedule_row_id) AS delay
FROM loan
INNER JOIN payment_schedule AS ps ON ps.loan_id = loan.id
INNER JOIN payment_schedule_row AS psr ON psr.payment_schedule_id = ps.id
INNER JOIN payment_schedule_cover AS psc ON psc.payment_schedule_id = ps.id
WHERE loan.status = 'payed'
GROUP BY ps.id) AS sum_by_id
GROUP BY period
결과 :
period | loan_sum | covers | delay
-----------------------------------
201407 | 384 | 422 | 0.07
지연을 제외하고 모든 것이 옳습니다. 0.11 (0.07 + 0.03 + 0.01)
그래서 나는 지금 쿼리에서 오류를 찾으려고 노력하고 있습니다. 어쩌면 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니다.
Sqlfiddle 링크 :http://sqlfiddle.com/#!2/21585/2
이 항목을 가져 오기 n a sqlfiddle 그리고 링크 – Matt
먼저 시도하십시오 – Matt
귀하의 쿼리와 동일한 결과가 나옵니다. 자, 한 시간 후에 sqlfiddle에 추가 할 것입니다. – MulOnPomm