私は、支払いの1株が何であるかを機能させるクエリを書くことから始めます。つまり、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の3つの方法に分割する必要があります。次に、予備の0.01に何をしたいですか?)