検索

ホームページ  >  に質問  >  本文

MySQL で中央値を計算する簡単な方法

<p>MySQL を使用して中央値を計算する最も簡単な (そしてできれば遅すぎない) 方法は何ですか? <code>AVG(x)</code> を使用して平均値を見つけましたが、中央値を計算する簡単な方法を見つけるのに苦労しています。現在、すべての行を PHP に返し、ソートしてから中央の行を選択していますが、これを 1 つの MySQL クエリで行う簡単な方法が必要です。 </p> <p>データ例:</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><code>val</code> で並べ替えると、<code>2 2 3 4 7 8 9</code> が得られるため、中央値は <code>4</code> ではなく、<code>4</code> になります。 ;code>SELECT AVG(val)</code> は <code>5</code> に等しい。 </p>
P粉960525583P粉960525583509日前663

全員に返信(2)返信します

  • P粉738248522

    P粉7382485222023-08-21 16:20:51

    オンラインのコメントで別の答えを見つけました:

    列に適切なインデックスが作成されていること、およびそのインデックスがフィルタリングと並べ替えに使用されていることを確認してください。実行計画を通じて検証します。

    リーリー

    「中央値」行番号を計算します。使用可能な例: median_row = Floor(count / 2)

    次にリストから選択します:

    リーリー

    これにより、必要な値が返されるはずです。

    返事
    0
  • P粉195200437

    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 関数が含まれています

    返事
    0
  • キャンセル返事