Tôi sẽ bắt đầu bằng cách viết một truy vấn hoạt động như thế nào là một phần của khoản thanh toán. Đó là, theo payment_id
, tổng của tất cả số tiền, chia cho số người mà nó cần phải trả. Sau đó, kết quả đó có thể được kết hợp trở lại dữ liệu ban đầu.
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
Sẽ có lợi nếu có các chỉ mục trên cả (payment_id)
và (payer_id)
.
Sẽ có lợi nếu có số tiền amount
trong kiểu dữ liệu DECIMAL, mặc dù bạn cần xem xét những gì bạn muốn làm với làm tròn. (Tổng số tiền thanh toán là 10,00 cần được chia thành ba cách, mỗi cách là 3,33 và sau đó bạn muốn điều gì xảy ra với 0,01 tiền dự phòng?)