solo quería decirle que puede usar variables en MySQL para imitar funciones analíticas. SUM OVER, por ejemplo, podría hacerse de la siguiente manera:
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
Si desea PARTITION BY , es posible pero un poco más complicado. Básicamente, agrega otro @variable para ver la cuenta (o lo que sea por lo que quiera particionar), ordenar por cuenta (o su variable) y luego restablecer el @sum cuando la cuenta cambia. De la siguiente manera:
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
Notará dos cambios importantes que se tuvieron que hacer para lograr el efecto de partición:
-
La tabla principal (
tbl) está encerrado en una subselección con unORDER BYcláusula. Esto es necesario porque cuando MySQL va a hacer@accountprueba de variables, los valores ya deben estar ordenados. Si esto no sucediera, obtendría valores de suma incorrectos, así como valores de cuenta. -
Hay una columna 'extra' con alias
as _. Puede ignorar esta columna cuando use resultados, pero el orden de@accountverificar y cambiar debe estar después de@sumcomprobar y cambiar.También con esto, puede elegir reordenar sus columnas si no le importa que la cuenta sea la última. Esto se hace sacando la primera
accountcolumna ya que se duplica con el último_columna y luego, obviamente, cambió el nombre del alias_aaccount.
Recursos:
- https://dev.mysql.com/ doc/refman/5.0/es/variables-de-usuario.html
- https://stackoverflow.com/a/2563940/263175