sql >> Database teknologi >  >> RDS >> Mysql

Samlet beregningsforespørgsel på enkelt SQL-tabel

Jeg vil starte med at skrive en forespørgsel, der virker, hvad en enkelt andel af en betaling er. Det vil sige pr. payment_id , summen af ​​alle beløb, divideret med det antal personer, den skal betale. Dette resultat kan derefter føjes tilbage til de originale data.

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 vil være en fordel at have indekser på begge (payment_id) og (payer_id) .

Det vil være en fordel at have amount felt i en DECIMAL datatype, selvom du skal overveje, hvad du vil gøre med afrunding. (En samlet betaling på 10,00 skal deles på tre måder, 3,33 hver, og hvad vil du så, der skal ske med den ekstra 0,01?)




  1. Sådan gemmer du underattributter i 3. tabel i laravel

  2. Tilføj et FULLTEXT-indeks i Lære 2 ved hjælp af anmærkninger?

  3. gem flere afkrydsningsfeltværdier i databasen ved hjælp af php og mysql

  4. Kan ikke oprette forbindelse til mysql med 127.0.0.1