Бих започнал, като напиша заявка, която работи, какво е едно споделяне на плащане. Тоест за payment_id
, сумата от всички суми, разделена на броя хора, които трябва да плати. След това този резултат може да се присъедини обратно към оригиналните данни.
SELECT
payers_payments.payer_id,
SUM(payers_payments.amount ) AS total_paid,
SUM(payers_payments.pays * payments.single_share) AS fair_share
FROM
payers_payments
INNER JOIN
(
SELECT
payment_id,
SUM(amount) / SUM(pays) AS single_share
FROM
payers_payments
GROUP BY
payment_id
)
AS payments
ON payers_payments.payment_id = payments.payment_id
GROUP BY
payers_payments.payer_id
Ще бъде полезно да имате индекси и за двата (payment_id)
и (payer_id)
.
Ще бъде полезно да имате amount
поле в тип данни DECIMAL, въпреки че трябва да обмислите какво искате да направите със закръгляването. (Общо плащане от 10,00 трябва да се раздели на три начина, по 3,33 всеки и след това какво искате да се случи с резервните 0,01?)