sql >> Databáze >  >> RDS >> Mysql

Souhrnný výpočetní dotaz na jednu SQL tabulku

Začal bych tím, že napíšu dotaz, který funguje, co je to jeden podíl platby. Tedy podle payment_id , součet všech částek vydělený počtem lidí, které potřebuje zaplatit. Tento výsledek lze poté připojit zpět k původním datům.

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

Bude výhodné mít indexy na obou (payment_id) a (payer_id) .

Bude výhodné mít amount pole v datovém typu DECIMAL, i když musíte zvážit, co chcete udělat se zaokrouhlováním. (Celkovou platbu ve výši 10,00 je třeba rozdělit třemi způsoby, každý 3,33 a co potom chcete, aby se stalo zbývajících 0,01?)




  1. Kolik paměti zabere nulová hodnota v DB?

  2. LINQ to SQL Take bez přeskakování způsobuje více příkazů SQL

  3. Microsoft hexadecimální data

  4. Co je Microsoft Access? Stručný úvod pro nové uživatele