Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta de cálculo agregada em uma única tabela SQL


Eu começaria escrevendo uma consulta que funcionasse o que é uma única parcela de um pagamento. Ou seja, por payment_id , a soma de todos os valores, dividida pelo número de pessoas que precisa pagar. Esse resultado pode então ser unido de volta aos dados originais.
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

Será benéfico ter índices em ambos (payment_id) e (payer_id) .

Será benéfico ter o amount campo em um tipo de dados DECIMAL, embora você precise considerar o que deseja fazer com o arredondamento. (Um pagamento total de 10,00 precisa ser dividido de três maneiras, 3,33 cada e então o que você quer que aconteça com o 0,01 sobrando?)