sql >> Databasteknik >  >> RDS >> Mysql

Skapa en kumulativ summakolumn i MySQL

Använda en korrelerad fråga:

  SELECT t.id,
         t.count,
         (SELECT SUM(x.count)
            FROM TABLE x
           WHERE x.id <= t.id) AS cumulative_sum
    FROM TABLE t
ORDER BY t.id

Använda MySQL-variabler:

  SELECT t.id,
         t.count,
         @running_total := @running_total + t.count AS cumulative_sum
    FROM TABLE t
    JOIN (SELECT @running_total := 0) r
ORDER BY t.id

Obs:

  • JOIN (SELECT @running_total := 0) r är en korskoppling och tillåter variabeldeklaration utan att kräva en separat SET kommando.
  • Tabellaliaset, r , krävs av MySQL för varje underfråga/härledd tabell/inlinevy

Varningar:

  • MySQL-specifik; inte portabel till andra databaser
  • ORDER BY är viktigt; det säkerställer att ordningen matchar OP och kan ha större konsekvenser för mer komplicerad variabelanvändning (IE:psuedo ROW_NUMBER/RANK-funktionalitet, som MySQL saknar)


  1. Returnera nummer från Oracle Select-satsen efter analysdatum

  2. Hur pratar Access med ODBC-datakällor? Del 2

  3. Hantera fel med hög allvarlighet i SQL Server

  4. Hur man får den aktuella tiden (utan tidszon) i PostgreSQL