Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête de calcul agrégé sur une seule table SQL

Je commencerais par écrire une requête qui fonctionne ce qu'est une part unique d'un paiement. Autrement dit, par payment_id , la somme de tous les montants, divisée par le nombre de personnes qu'elle doit payer. Ce résultat peut ensuite être associé aux données d'origine.

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

Il sera avantageux d'avoir des index sur (payment_id) et (payer_id) .

Il sera avantageux d'avoir le amount champ dans un type de données DECIMAL, bien que vous deviez considérer ce que vous voulez faire avec l'arrondi. (Un paiement total de 10,00 doit être divisé en trois parties, 3,33 chacune, puis que voulez-vous qu'il advienne des 0,01 de réserve ?)