Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aggregierte Berechnungsabfrage für eine einzelne SQL-Tabelle

Ich würde damit beginnen, eine Abfrage zu schreiben, die funktioniert, was ein einzelner Anteil einer Zahlung ist. Das heißt, pro payment_id , die Summe aller Beträge, geteilt durch die Anzahl der zu zahlenden Personen. Dieses Ergebnis kann dann wieder mit den Originaldaten verbunden werden.

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

Es ist von Vorteil, Indizes für beide (payment_id) zu haben und (payer_id) .

Es ist von Vorteil, den amount zu haben Feld in einem DECIMAL-Datentyp, obwohl Sie überlegen müssen, was Sie mit dem Runden tun möchten. (Eine Gesamtzahlung von 10,00 muss in drei Teile geteilt werden, jeweils 3,33, und was soll dann mit den restlichen 0,01 passieren?)