Einfache Möglichkeit, den Median mit MySQL zu berechnen
P粉720716934
2023-08-29 11:47:07
<p>Was ist der einfachste (hoffentlich nicht zu langsame) Weg, den Median mit MySQL zu berechnen? Ich verwende <code>AVG(x)</code>, um den Mittelwert zu ermitteln, habe jedoch Probleme, eine einfache Möglichkeit zur Berechnung des Medians zu finden. Im Moment gebe ich alle Zeilen an PHP zurück, sortiere sie und wähle dann die mittleren Zeilen aus, aber es muss eine einfache Möglichkeit geben, dies in einer einzigen MySQL-Abfrage zu tun. </p>
<p>Beispieldaten:</p>
<pre class="brush:php;toolbar:false;">id val |
--------
1 4
2 7
3 2
4 2
5 9
6 8
7 3</pre>
<p>Sortierung <code>val</code> ergibt <code>2 2 3 4 7 8 9</code>, daher sollte der Median <code>4</code> sein. Und <code> ;SELECT AVG(val)</code> == <code>5</code>. </p>
我刚刚在评论中在线找到了另一个答案一>:
确保您的列有良好的索引,并且索引用于过滤和排序。与解释计划进行验证。
计算“中位数”行号。也许使用:
median_row = Floor(count / 2)
。然后从列表中选择它:
这应该返回一行,其中包含您想要的值。
在 MariaDB / MySQL 中:
Steve Cohen 指出,在第一次传递之后,@rownum 将包含总行数。这可用于确定中位数,因此不需要第二次传递或连接。
此外,
AVG(dd.val)
和dd.row_number IN(...)
用于在存在偶数条记录时正确生成中位数。推理:最后,MariaDB 10.3.3+ 包含 MEDIAN 函数