Ich wollte Ihnen nur sagen, dass Sie Variablen in MySQL verwenden können, um analytische Funktionen nachzuahmen. SUM OVER könnte beispielsweise wie folgt durchgeführt werden:
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
Wenn Sie PARTITION BY möchten , es ist möglich, aber nur ein bisschen komplizierter. Grundsätzlich fügen Sie eine weitere @variable hinzu um das Konto (oder was auch immer Sie partitionieren möchten) zu beobachten, nach Konto (oder Ihrer Variablen) zu sortieren und dann @sum zurückzusetzen wenn sich das Konto ändert. Wie folgt:
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
Sie werden zwei wesentliche Änderungen bemerken, die vorgenommen werden mussten, um den Partitionseffekt zu erreichen:
-
Die Haupttabelle (
tbl) wird in eine Unterauswahl mit einemORDER BYeingeschlossen Klausel. Dies ist notwendig, da MySQL den@accountausführen soll Variablentests müssen die Werte bereits bestellt werden. Wenn dies nicht geschehen wäre, würden Sie sowohl falsche Summenwerte als auch Kontowerte erhalten. -
Es gibt eine 'zusätzliche' Spalte mit dem Alias
as _. Sie können diese Spalte bei der Verwendung von Ergebnissen ignorieren, aber die Reihenfolge von@accountcheck und change müssen nach dem@sumstehen überprüfen und ändern.Auch hiermit könnten Sie Ihre Spalten neu anordnen, wenn es Ihnen nichts ausmacht, dass das Konto das letzte ist. Dies geschieht durch den Abschluss des ersten
accountSpalte, da sie mit dem letzten_dupliziert wird Spalte und dann offensichtlich den Alias _umbenannt aufaccount.
Ressourcen:
- https://dev.mysql.com/ doc/refman/5.0/en/user-variables.html
- https://stackoverflow.com/a/2563940/263175