P粉7382485222023-08-21 16:20:51
オンラインのコメントで別の答えを見つけました:
列に適切なインデックスが作成されていること、およびそのインデックスがフィルタリングと並べ替えに使用されていることを確認してください。実行計画を通じて検証します。
リーリー 「中央値」行番号を計算します。使用可能な例: median_row = Floor(count / 2)
。
次にリストから選択します:
リーリーこれにより、必要な値が返されるはずです。
P粉1952004372023-08-21 13:39:20
MariaDB/MySQL の場合:
リーリーSteve Cohen さんは、最初のパスの後、@rownum に合計行数が含まれることを指摘しました。これを使用して中央値を決定できるため、2 回目のパスや結合は必要ありません。
さらに、レコード数が偶数の場合に中央値を正しく計算するために、AVG(dd.val)
および dd.row_number IN(...)
が使用されます。理由は次のとおりです:
最後に、MariaDB 10.3.3 には MEDIAN 関数が含まれています