volevo solo dirti che puoi usare le variabili in MySQL per imitare le funzioni analitiche. SUM OVER, ad esempio, potrebbe essere fatto come segue:
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
Se vuoi PARTITION BY , è possibile ma solo un po' più complicato. Fondamentalmente, aggiungi un altro @variable per guardare l'account (o qualunque cosa tu voglia partizionare), ordinare per account (o la tua variabile), e quindi reimpostare il @sum quando l'account cambia. Come segue:
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
Noterai due importanti modifiche che è stato necessario apportare per ottenere l'effetto di partizione:
-
La tabella principale (
tbl) è racchiuso in un sub select con unORDER BYclausola. Questo è necessario perché quando MySQL va a fare il@accounttest delle variabili i valori devono essere già ordinati. Se ciò non accadesse, otterresti valori di somma errati e valori dell'account. -
C'è una colonna "extra" alias
as _. Puoi ignorare questa colonna quando utilizzi i risultati, ma l'ordine del@accountil controllo e la modifica devono essere dopo il@sumcontrolla e cambia.Inoltre, con questo, potresti scegliere di riordinare le tue colonne se non ti dispiaceva essere l'ultimo. Questo viene fatto eliminando il primo
accountcolonna poiché si duplica con l'ultimo_colonna e poi ovviamente rinominato l'alias_aaccount.
Risorse:
- https://dev.mysql.com/ doc/refman/5.0/en/user-variables.html
- https://stackoverflow.com/a/2563940/263175