単一のクエリで中央値を取得できるソリューションはどこにもありません。一時テーブルは気にしませんが、必要ない場合は素晴らしいです!これが私が思いついたものです:
SELECT AVG(profit) median, nofitems FROM(
SELECT x.profit, SUM(SIGN(1.0-SIGN(y.profit-x.profit))) diff, count(*) nofitems, floor(count(*)+1/2)
FROM brand_prof x, brand_prof y
GROUP BY x.profit
HAVING SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = floor((COUNT(*)+1)/2)
OR SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = ceiling((COUNT(*)+1)/2)
) x;
私はこれを偶数のセットでテストし、正しい答えを得ました。brand_profは、brand_nameと10進数値であるprofitの2つの列です。これが整数値の場合、テストした以上に "ceiling((CAST COUNT(*)AS DECIMAL)...")をキャストする必要があるかもしれません。デカルト積を使用し、符号の合計を関連付けるクールなアイデアは、残念ながら私は作者を忘れてしまいました。
meta
少し読んだ後、この質問がここにあるか、SOにあるべきかを判断するための分裂があるようです。これは忍者レベルのクエリではない可能性があることを認識していますが、困惑しており、私が働いている会社にはDBAがいません(合計6人)。