Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zagregowane zapytanie obliczeniowe na pojedynczej tabeli SQL

Zacząłbym od napisania zapytania, które działa, jaka jest pojedyncza część płatności. Oznacza to, że za payment_id , suma wszystkich kwot podzielona przez liczbę osób, które musi zapłacić. Wynik ten można następnie połączyć z oryginalnymi danymi.

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

Korzystne będzie posiadanie indeksów na obu (payment_id) i (payer_id) .

Korzystne będzie posiadanie amount w typie danych DECIMAL, chociaż musisz rozważyć, co chcesz zrobić z zaokrąglaniem. (Łączna płatność 10,00 musi zostać podzielona na trzy sposoby, 3,33 na każdy, a potem co chcesz zrobić z zapasem 0,01?)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zbudować dynamiczne zapytanie przez powiązanie parametrów w node.js-sql?

  2. mysql Dlaczego zmienna nie zmienia się w if

  3. Środowisko pracy MySQL nie może połączyć się z serwerem bazy danych

  4. Jak mogę połączyć się z MySQL w Pythonie 3 w systemie Windows?

  5. MySQL CAST jako DATE