sql >> Database >  >> RDS >> Mysql

Geaggregeerde berekeningsquery op enkele SQL-tabel

Ik zou beginnen met het schrijven van een vraag die werkt wat een enkel aandeel van een betaling is. Dat wil zeggen, per payment_id , de som van alle bedragen, gedeeld door het aantal mensen dat het moet betalen. Dat resultaat kan dan weer worden samengevoegd met de oorspronkelijke gegevens.

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

Het is handig om indexen te hebben op beide (payment_id) en (payer_id) .

Het is handig om het amount . te hebben veld in een DECIMAAL gegevenstype, hoewel u moet overwegen wat u met afronding wilt doen. (Een totale betaling van 10,00 moet op drie manieren worden verdeeld, elk 3,33 en wat wil je dan dat er met de resterende 0,01 gebeurt?)




  1. Correct ontsnappend streepje (-) in mysql-query

  2. Belangrijkste indicatoren van probleemontwerp

  3. Deterministische sorteervolgorde voor vensterfuncties

  4. Oproep naar niet-gedefinieerde functie sqlsrv_connect() - Problemen oplossen