sql >> Base de Datos >  >> RDS >> Mysql

Consulta de cálculo agregado en una sola tabla SQL

Comenzaría escribiendo una consulta que funciona con lo que es una parte única de un pago. Es decir, por payment_id , la suma de todas las cantidades, dividida por el número de personas que necesita pagar. Ese resultado se puede volver a unir a los datos originales.

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á beneficioso tener índices en ambos (payment_id) y (payer_id) .

Será de beneficio tener la amount campo en un tipo de datos DECIMAL, aunque debe considerar qué desea hacer con el redondeo. (Un pago total de 10,00 debe dividirse en tres partes, 3,33 cada una y luego, ¿qué quiere que suceda con los 0,01 sobrantes?)