在統計分析和資料解讀中,確定資料集的中位數至關重要。雖然MySQL提供了方便的AVG()函數來計算平均值,但尋找中位數需要不同的方法。本文提供了一種使用單一MySQL查詢計算中位數的簡化解決方案。
MySQL提供了一種比在PHP中排序和選擇行更有效率的方法:
<code class="language-sql">SELECT AVG(dd.val) as median_val FROM ( SELECT d.val, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum FROM data d, (SELECT @rownum:=0) r WHERE d.val is NOT NULL -- (在此处添加任何where子句) ORDER BY d.val ) as dd WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) )</code>
程式碼解讀:
此查詢的最佳化版本使用行計數操作來避免第二次傳遞或連接:
<code class="language-sql">SELECT AVG(dd.val) as median_val FROM ( SELECT d.val, (@rownum:=@rownum+1) as `row_number` -- 性能优化 FROM data d, (SELECT @rownum:=0) r WHERE d.val is NOT NULL -- (添加where子句) ORDER BY d.val ) as dd WHERE dd.row_number IN ( FLOOR((@rownum)/2), FLOOR((@rownum)/2)+1 ) -- 或 FLOOR((@rownum)/2), FLOOR((@rownum)/2)+1 )</code>
MariaDB 10.3.3 版本包含內建的MEDIAN函數:
<code class="language-sql">SELECT MEDIAN(val) AS median_val FROM data</code>
總之,這些方法為在MySQL中計算中位數提供了直接且高效的解決方案,使開發人員能夠輕鬆地從資料中提取有意義的見解。
以上是MySQL中如何有效率地計算中位數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!