Ich würde damit beginnen, eine Abfrage zu schreiben, die funktioniert, was ein einzelner Anteil einer Zahlung ist. Das heißt, pro payment_id
, die Summe aller Beträge, geteilt durch die Anzahl der zu zahlenden Personen. Dieses Ergebnis kann dann wieder mit den Originaldaten verbunden werden.
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
Es ist von Vorteil, Indizes für beide (payment_id)
zu haben und (payer_id)
.
Es ist von Vorteil, den amount
zu haben Feld in einem DECIMAL-Datentyp, obwohl Sie überlegen müssen, was Sie mit dem Runden tun möchten. (Eine Gesamtzahlung von 10,00 muss in drei Teile geteilt werden, jeweils 3,33, und was soll dann mit den restlichen 0,01 passieren?)