MySQLの変数を使用して分析関数を模倣できることを伝えたかっただけです。たとえば、SUMOVERは次のように実行できます。
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
PARTITION BY
が必要な場合 、それは可能ですが、もう少し複雑です。基本的に、別の@variable
を追加します アカウント(またはパーティション分割するもの)を監視し、アカウント(または変数)で並べ替えてから、@sum
をリセットします。 アカウントが変更されたとき。次のように:
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
パーティション効果を実現するために実行する必要があった2つの主要な変更に注意してください。
-
メインテーブル(
tbl
)は、ORDER BY
を使用してサブ選択に含まれます 句。これが必要なのは、MySQLが@account
を実行する場合です。 変数テストの値はすでに注文されている必要があります。これが行われなかった場合、アカウント値だけでなく、誤った合計値も取得されます。 -
as _
というエイリアスの「extra」列があります 。結果を使用する場合はこの列を無視できますが、@account
の順序は無視できます。 チェックと変更は@sum
の後に行う必要があります チェックして変更します。これでも、アカウントが最後であることを気にしない場合は、列を並べ替えることを選択できます。これは、最初の
account
を取り出すことによって行われます。 最後の_
と重複しているため 列に変更し、明らかにエイリアスの名前を_
に変更しましたaccount
へ 。
リソース:
- http://dev.mysql.com/ doc / refman / 5.0 / en / user-variables.html
- https://stackoverflow.com/a/2563940/263175