Cara mudah untuk mengira median dalam MySQL
P粉960525583
2023-08-20 18:05:23
<p>Apakah cara paling mudah (dan mudah-mudahan tidak terlalu perlahan) untuk mengira median menggunakan MySQL? Saya telah menggunakan <code>AVG(x)</code> untuk mencari min, tetapi saya menghadapi masalah mencari cara mudah untuk mengira median. Pada masa ini saya mengembalikan semua baris ke PHP, mengisih, dan kemudian memilih baris tengah, tetapi mesti ada cara mudah untuk melakukannya 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 mengikut <kod>val</kod> kita mendapat <kod>2 2 3 4 7 8 9</kod>, jadi median hendaklah <kod>4</kod>, bukan < ;kod>PILIH AVG(val)</kod> sama dengan <kod>5</kod>. </p>
Saya baru sahaja menemui jawapan lain dalam talian dalam ulasan:
Pastikan lajur anda diindeks dengan baik dan indeks digunakan untuk menapis dan mengisih. Mengesahkan melalui pelan pelaksanaan.
Kira nombor baris "median". Boleh digunakan:
median_row = floor(count / 2)
.Kemudian pilih daripada senarai:
Ini sepatutnya mengembalikan nilai yang anda inginkan.
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 atau gabungan kedua diperlukan.
Selain itu,
AVG(dd.val)
和dd.row_number IN(...)
digunakan untuk mengira median dengan betul apabila bilangan rekod adalah genap. Alasannya adalah seperti berikut:Akhir sekali, MariaDB 10.3.3+ termasuk fungsi MEDIAN