só queria dizer que você pode usar variáveis no MySQL para imitar funções analíticas. SUM OVER, por exemplo, pode ser feito da seguinte forma:
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
Se você deseja
PARTITION BY , é possível, mas um pouco mais complicado. Basicamente, você adiciona outro @variable para assistir a conta (ou o que você deseja particionar), ordene por conta (ou sua variável) e, em seguida, redefina o @sum quando a conta muda. Do seguinte modo:
SELECT account,
amount,
(case when @account != account then @sum := amount else @sum := @sum + amount end) as sum,
(case when @account != account then @account := account else @account end) as _
FROM (SELECT * FROM tbl ORDER BY account)
JOIN (SELECT @sum := 0) s
JOIN (SELECT @account := '') a
Você notará duas grandes mudanças que tiveram que ser feitas para realizar o efeito de partição:
-
A tabela principal (tbl) está envolto em um sub select com umORDER BYcláusula. Isso é necessário porque quando o MySQL vai fazer o@accountvariável testando os valores precisam já estar ordenados. Se isso não acontecesse, você obteria valores de soma incorretos, bem como valores de conta.
-
Existe uma coluna 'extra' com o aliasas _. Você pode ignorar esta coluna ao usar resultados, mas a ordem do@accountcheck and change precisa estar após o@sumverifique e altere.
Além disso, você pode optar por reordenar suas colunas se não se importar que a conta seja a última. Isso é feito retirando a primeiraaccountcoluna, pois duplica com o último_coluna e, em seguida, obviamente renomeou o alias_paraaccount.
Recursos:
- https://dev.mysql.com/ doc/refman/5.0/en/user-variables.html
- https://stackoverflow.com/a/2563940/263175