Ik zou beginnen met het schrijven van een vraag die werkt wat een enkel aandeel van een betaling is. Dat wil zeggen, per payment_id
, de som van alle bedragen, gedeeld door het aantal mensen dat het moet betalen. Dat resultaat kan dan weer worden samengevoegd met de oorspronkelijke gegevens.
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
Het is handig om indexen te hebben op beide (payment_id)
en (payer_id)
.
Het is handig om het amount
. te hebben veld in een DECIMAAL gegevenstype, hoewel u moet overwegen wat u met afronding wilt doen. (Een totale betaling van 10,00 moet op drie manieren worden verdeeld, elk 3,33 en wat wil je dan dat er met de resterende 0,01 gebeurt?)