hanya ingin memberi tahu Anda bahwa Anda dapat menggunakan variabel di MySQL untuk meniru fungsi analitik. SUM OVER, misalnya, dapat dilakukan sebagai berikut:
SELECT amount,
@sum := @sum + amount as sum
FROM tbl
JOIN (SELECT @sum := 0) s
Jika Anda ingin PARTITION BY
, itu mungkin tetapi hanya sedikit lebih rumit. Pada dasarnya, Anda menambahkan @variable
lainnya untuk melihat akun (atau apa pun yang Anda ingin partisi), pesan berdasarkan akun (atau variabel Anda), lalu setel ulang @sum
ketika akun berubah. Sebagai berikut:
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
Anda akan melihat dua perubahan besar yang harus dilakukan untuk mencapai efek partisi:
-
Tabel utama (
tbl
) terbungkus dalam sub pilih denganORDER BY
ayat. Ini diperlukan karena ketika MySQL pergi untuk melakukan@account
variabel pengujian nilai harus sudah dipesan. Jika ini tidak terjadi, Anda akan mendapatkan nilai jumlah yang salah serta nilai akun. -
Ada kolom 'ekstra' alias
as _
. Anda dapat mengabaikan kolom ini saat menggunakan hasil, tetapi urutan@account
pemeriksaan dan perubahan harus setelah@sum
periksa dan ubah.Juga dengan ini, Anda dapat memilih untuk menyusun ulang kolom Anda jika Anda tidak keberatan akun menjadi yang terakhir. Ini dilakukan dengan mengeluarkan
account
pertama kolom karena duplikat dengan_
terakhir kolom dan kemudian dengan jelas mengganti nama alias_
keaccount
.
Sumber daya:
- http://dev.mysql.com/ doc/refman/5.0/en/user-variables.html
- https://stackoverflow.com/a/2563940/263175