Saya akan mulai dengan menulis kueri yang berfungsi seperti apa satu bagian pembayaran. Yaitu, per payment_id
, jumlah dari semua jumlah, dibagi dengan jumlah orang yang harus dibayar. Hasil tersebut kemudian dapat digabungkan kembali ke data aslinya.
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
Akan bermanfaat untuk memiliki indeks di kedua (payment_id)
dan (payer_id)
.
Akan bermanfaat untuk memiliki amount
bidang dalam tipe data DECIMAL, meskipun Anda perlu mempertimbangkan apa yang ingin Anda lakukan dengan pembulatan. (Total pembayaran 10,00 perlu dibagi tiga cara, masing-masing 3,33 dan kemudian apa yang Anda inginkan untuk cadangan 0,01?)