मैं एक प्रश्न लिखकर शुरू करूंगा जो काम करता है कि भुगतान का एक हिस्सा क्या है। यानी प्रति 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 प्रत्येक और फिर आप अतिरिक्त 0.01 का क्या करना चाहते हैं?)