[解決済み】MySQLで中央値を計算する簡単な方法
2022-04-05 16:48:56
質問
MySQL で中央値を計算する最も簡単な(そしてできればあまり遅くない)方法は何ですか?私は
AVG(x)
平均値を求めるには良いのですが、中央値を求める簡単な方法を見つけるのに苦労しています。今のところ、私はすべての行を PHP に返し、ソートを行い、そして中央の行を選んでいますが、きっと 1 つの MySQL クエリでそれを行う簡単な方法があるはずです。
データ例です。
id | val
--------
1 4
2 7
3 2
4 2
5 9
6 8
7 3
でのソート
val
は
2 2 3 4 7 8 9
となるので、中央値は
4
対
SELECT AVG(val)
どの
5
.
解決方法は?
MariaDB / MySQLの場合。
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
-- put some where clause here
ORDER BY d.val
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );
スティーブ・コーエン は、最初のパスの後、@rownum が行の総数を含んでいることを指摘しています。 これは中央値を決定するために使用されるため、2回目のパスや結合は必要ありません。
また
AVG(dd.val)
と
dd.row_number IN(...)
は、レコード数が偶数である場合に中央値を正しく生成するために使用されます。 推論です。
SELECT FLOOR((3+1)/2),FLOOR((3+2)/2); -- when total_rows is 3, avg rows 2 and 2
SELECT FLOOR((4+1)/2),FLOOR((4+2)/2); -- when total_rows is 4, avg rows 2 and 3
関連
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み] 2つの列を分割するには?
-
[解決済み] ORA-00918: 列があいまいに定義されています」を解決する方法
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ERROR: 参照されたテーブル "bar" の与えられたキーに一致するユニークな制約がありません。
-
[解決済み】ストアドプロシージャーのエラー ORA-06550
-
[解決済み] varchar データ型から datetime データ型に変換すると、SQL クエリで範囲外の値が発生する
-
[解決済み】INTERSECTとINNER JOINは根本的に違うのか?[重複している]
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] SQL Server - INNER JOIN WITH DISTINCT
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] アクセスクエリーエラー(from句のシンタックスエラー)
-
[解決済み】SQL Serverで中央値を計算する関数