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 BYayat. Ini diperlukan karena ketika MySQL pergi untuk melakukan@accountvariabel 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@accountpemeriksaan dan perubahan harus setelah@sumperiksa 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
accountpertama kolom karena duplikat dengan_terakhir kolom dan kemudian dengan jelas mengganti nama alias_keaccount.
Sumber daya:
- https://dev.mysql.com/ doc/refman/5.0/en/user-variables.html
- https://stackoverflow.com/a/2563940/263175