sql >> Databasteknik >  >> RDS >> Mysql

Aggregerad beräkningsfråga på en enda SQL-tabell

Jag skulle börja med att skriva en fråga som fungerar vad en enskild andel av en betalning är. Det vill säga per payment_id , summan av alla belopp, dividerat med antalet personer den behöver betala. Det resultatet kan sedan kopplas tillbaka till originaldata.

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

Det kommer att vara en fördel att ha index på båda (payment_id) och (payer_id) .

Det kommer att vara en fördel att ha amount fält i en DECIMAL datatyp, även om du måste tänka på vad du vill göra med avrundning. (En total betalning på 10,00 måste delas på tre sätt, 3,33 vardera och vad vill du att ska hända med extra 0,01?)




  1. Streaming MySql ResultSet med fast antal resultat åt gången

  2. Mysql utf32_unicode_ci och html charset utf-8 används, men tecknet � visas

  3. Hur frågar jag efter XML-värden och attribut från tabellen i SQL Server?

  4. GRANT-syntax för domän\användare