オンラインのコメントで別の答えを見つけました:
列に適切なインデックスが作成されていること、およびそのインデックスがフィルタリングと並べ替えに使用されていることを確認(rèn)してください。実行計(jì)畫を通じて検証します。
リーリー 「中央値」行番號(hào)を計(jì)算します。使用可能な例: median_row = Floor(count / 2)
。
次にリストから選択します:
リーリーこれにより、必要な値が返されるはずです。
MariaDB/MySQL の場(chǎng)合:
リーリーSteve Cohen さんは、最初のパスの後、@rownum に合計(jì)行數(shù)が含まれることを指摘しました。これを使用して中央値を決定できるため、2 回目のパスや結(jié)合は必要ありません。
さらに、レコード數(shù)が偶數(shù)の場(chǎng)合に中央値を正しく計(jì)算するために、AVG(dd.val)
および dd.row_number IN(...)
が使用されます。理由は次のとおりです: