Mysql
 sql >> Database >  >> RDS >> Mysql

Query di calcolo aggregata su una singola tabella SQL

Inizierei scrivendo una query che funzioni su cosa sia una singola quota di un pagamento. Cioè, per payment_id , la somma di tutti gli importi, divisa per il numero di persone che deve pagare. Il risultato può quindi essere unito ai dati originali.

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

Sarà utile avere indici su entrambi (payment_id) e (payer_id) .

Sarà utile avere l'amount campo in un tipo di dati DECIMAL, anche se devi considerare cosa vuoi fare con l'arrotondamento. (Un pagamento totale di 10,00 deve essere diviso in tre modi, 3,33 ciascuno e poi cosa vuoi che accada allo 0,01 di riserva?)