sql >> Database >  >> RDS >> Mysql

Maak een cumulatieve somkolom in MySQL

Een gecorreleerde zoekopdracht gebruiken:

  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

MySQL-variabelen gebruiken:

  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

Opmerking:

  • De JOIN (SELECT @running_total := 0) r is een cross join, en maakt variabele declaratie mogelijk zonder dat een aparte SET . nodig is opdracht.
  • De tabelalias, r , is vereist door MySQL voor elke subquery/afgeleide tabel/inline-weergave

Waarschuwingen:

  • MySQL-specifiek; niet overdraagbaar naar andere databases
  • De ORDER BY is belangrijk; het zorgt ervoor dat de volgorde overeenkomt met het OP en kan grotere implicaties hebben voor meer gecompliceerd gebruik van variabelen (IE:psuedo ROW_NUMBER/RANK-functionaliteit, die MySQL mist)


  1. Een lijst met triggers retourneren in SQL Server

  2. Postgres docker-container bouwen met initieel schema

  3. Is het mogelijk om een ​​variabele te gebruiken en geen retourtype op te geven in postgreSQL?

  4. Database hernoemen in SQL Server - SQL Server / TSQL-zelfstudie, deel 26