ホームページ > データベース > mysql チュートリアル > MySQL で中央値を効率的に計算するにはどうすればよいですか?

MySQL で中央値を効率的に計算するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-20 15:13:09
オリジナル
264 人が閲覧しました

How to Efficiently Calculate the Median in MySQL?

MySQL の中央値を簡単に計算します

統計分析とデータ解釈では、データセットの中央値を決定することが重要です。 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>
ログイン後にコピー

コード解釈:

  • サブクエリは、各値の行番号と合計行数を計算します。
  • AVG() 関数は中央値の平均を計算します。
  • IN 句は結果をフィルタリングし、行数が偶数の場合は中央の行を含めます。

パフォーマンスの強化

このクエリの最適化されたバージョンでは、行カウント操作を使用して 2 番目のパスまたは結合を回避します。

<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 の強化

MariaDB バージョン 10.3.3 には、組み込みの MEDIAN 関数が含まれています:

<code class="language-sql">SELECT MEDIAN(val) AS median_val
FROM data</code>
ログイン後にコピー

これらのメソッドを組み合わせることで、MySQL で中央値を計算するための簡単で効率的なソリューションが提供され、開発者がデータから有意義な洞察を簡単に抽出できるようになります。

以上がMySQL で中央値を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート