この単純なサブグループの中央値を計算したい:y
xy_table
x | y --groups--> gid | x | y --medians--> gid | x | y
------- ------------- -------------
0.1 | 4 0.0 | 0.1 | 4 0.0 | 0.1 | 4
0.2 | 3 0.0 | 0.2 | 3 | |
0.7 | 5 1.0 | 0.7 | 5 1.0 | 0.7 | 5
1.5 | 1 2.0 | 1.5 | 1 | |
1.9 | 6 2.0 | 1.9 | 6 | |
2.1 | 5 2.0 | 2.1 | 5 2.0 | 2.1 | 5
2.7 | 1 3.0 | 2.7 | 1 3.0 | 2.7 | 1
この例では、everyx
は一意であり、テーブルは既に でソートされていx
ます。私は今、各グループGROUP BY round(x)
の中央値を保持するタプルを取得したいと考えています。y
このランキング クエリを使用して、テーブル全体の中央値を既に計算できます。
SELECT a.x, a.y FROM xy_table a,xy_table b
WHERE a.y >= b.y
GROUP BY a.x, a.y
HAVING count(*) = (SELECT round((count(*)+1)/2) FROM xy_table)
出力:0.1, 4.0
しかし、サブグループの中央値を計算するクエリの作成にはまだ成功していません。
注意:median()
利用可能な集計関数がありません。PARTITION
また、特別な、RANK
、またはQUANTILE
ステートメントを使用して解決策を提案しないでください(類似しているがベンダー固有すぎるSO の質問に見られるように)。プレーンな SQL が必要です (つまり、median()
関数のない SQLite と互換性がある)