SQLで中央値を求める以下の方法について質問です。
https://teratail.com/questions/73702
テーブル名:Graduates
列はincomeのみ、10行。
|income|
10,000
10,000
10,000
15,000
15,000
20,000
20,000
20,000
30,000
400,000以下のsqlで、なぜ「Graduatesの5列目の値+6列目の値/2」
を求めることができるのかわかりません。SELECT AVG(DISTINCT income)
FROM (SELECT T1.income
FROM Graduates T1, Graduates T2
GROUP BY T1.income
--S1の条件
HAVING SUM(CASE WHEN T2.income >= T1.income THEN 1
ELSE 0 END) >= COUNT() / 2
--S2の条件
AND SUM(CASE WHEN T2.income <= T1.income THEN 1
ELSE 0 END) >= COUNT() / 2) TMP;
例えば下記のようなデータがあり、Aの中央値とBの中央値をそれぞれ求めたいときはどのようにすればよいでしょうか?
date | kinds | income |
---|---|---|
2/3 | A | 1000 |
2/3 | B | 500 |
2/4 | A | 1800 |
2/4 | B | 2000 |
2/5 | A | 700 |
2/5 | B | 1300 |
2/6 | A | 1100 |
2/6 | B | 1000 |
サブクエリでorder by や group byを使うのかなと考えたのですが良い案が思い浮かばず聞かせていただきました。