Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah mysql memiliki fungsi analitik yang setara dengan Oracle?

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:

  1. Tabel utama (tbl ) terbungkus dalam sub pilih dengan ORDER 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.

  2. 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 _ ke account .

Sumber daya:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Setel Ulang Kata Sandi Root MySQL di Windows

  2. Menggunakan variabel dalam klausa LIMIT di MySQL

  3. MySQL - Menggunakan COUNT(*) dalam klausa WHERE

  4. Menghilangkan MySQL Split-Brain di Database Multi-Cloud

  5. Prosedur Tersimpan MySQL dengan Parameter