Cara mudah untuk mengira median dengan MySQL
P粉720716934
2023-08-29 11:47:07
<p>Apakah cara paling mudah (mudah-mudahan tidak terlalu perlahan) untuk mengira median menggunakan MySQL? Saya menggunakan <code>AVG(x)</code> 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. </p>
<p>Contoh data:</p>
<pre class="brush:php;toolbar:false;">id |
--------
1 4
2 7
3 2
4 2
5 9
6 8
7 3</pra>
<p>Isih <kod>val</kod> memberikan <kod>2 2 3 4 7 8 9</kod>, jadi median hendaklah <kod>4</kod>, Dan <kod> ;PILIH AVG(val)</kod> == <kod>5</kod>. </p>
Saya baru jumpa 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 Cohen menegaskan 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