Jeg vil starte med at skrive en forespørgsel, der virker, hvad en enkelt andel af en betaling er. Det vil sige pr. payment_id
, summen af alle beløb, divideret med det antal personer, den skal betale. Dette resultat kan derefter føjes tilbage til de originale data.
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
Det vil være en fordel at have indekser på begge (payment_id)
og (payer_id)
.
Det vil være en fordel at have amount
felt i en DECIMAL datatype, selvom du skal overveje, hvad du vil gøre med afrunding. (En samlet betaling på 10,00 skal deles på tre måder, 3,33 hver, og hvad vil du så, der skal ske med den ekstra 0,01?)