Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Criar uma coluna de soma cumulativa no MySQL

Usando uma consulta correlacionada:

  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

Usando variáveis ​​do MySQL:

  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

Observação:
  • O JOIN (SELECT @running_total := 0) r é uma junção cruzada e permite a declaração de variáveis ​​sem exigir um SET separado comando.
  • O alias da tabela, r , é exigido pelo MySQL para qualquer subconsulta/tabela derivada/visualização em linha

Ressalvas:
  • Especifico do MySQL; não é portátil para outros bancos de dados
  • O ORDER BY é importante; ele garante que a ordem corresponda ao OP e pode ter implicações maiores para o uso de variáveis ​​mais complicado (IE:funcionalidade psuedo ROW_NUMBER/RANK, que o MySQL não possui)