Apakah cara paling mudah (mudah-mudahan tidak terlalu perlahan) untuk mengira median menggunakan MySQL? Saya menggunakan AVG(x)
untuk mencari min, tetapi saya menghadapi masalah mencari cara mudah untuk mengira median. Sekarang, saya mengembalikan semua baris ke PHP, menyusun, dan kemudian memilih baris tengah, tetapi mesti ada beberapa cara mudah untuk melakukan ini dalam satu pertanyaan MySQL.
Contoh data:
id | -------- 1 4 2 7 3 2 4 2 5 9 6 8 7 3Isih
val memberikan2 2 3 4 7 8 9 , jadi median hendaklah4 , Dan;PILIH AVG(val) ==5 .
Saya barujumpa jawapan lain dalam talian 一> dalam ulasan:
Pastikan lajur anda diindeks dengan baik dan indeks digunakan untuk menapis dan mengisih. Sahkan dengan menerangkan pelan.
Kira nombor baris "median". Mungkin gunakan:
median_row = Floor(count / 2)
.Kemudian pilihnya daripada senarai:
Ini sepatutnya mengembalikan baris dengan nilai yang anda mahukan.
Dalam MariaDB / MySQL:
Steve Cohenmenegaskan bahawa selepas hantaran pertama, @rownum akan mengandungi jumlah bilangan baris. Ini boleh digunakan untuk menentukan median, jadi tiada hantaran kedua atau gabungan diperlukan.
Selain itu,
AVG(dd.val)
和dd.row_number IN(...)
digunakan untuk menjana median dengan betul apabila terdapat bilangan rekod genap. Alasan:Akhir sekali,MariaDB 10.3.3+ termasuk fungsi MEDIAN