2016-10-12 29 views
0

私はTable1という名前のサンプルテーブルを持っています。表には、IDと年齢の2つの列があります。年齢の中央値を計算したい私が入れている。このため SQLクエリ次SQLを使用して列の中央値を計算する

SELECT Age as Median FROM 
    (SELECT a1.Age, COUNT(a1.Age) Rank 
    FROM Table1 a1, Table1 a2 
    WHERE a1.Age < a2.Age OR a1.Age=a2.Age 
    group by a1.Age 
    order by a1.Age desc) a3 
    WHERE Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table1); 

しかし、私は取得しています構文エラー

syntax error in query expression Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table1) 

私はMS AccessのSQLを持っているとは思わない

+1

どのDBMSを使用していますか? –

+0

そこには、この種の事例がたくさんあります。おそらくあなたは検索エンジンがありません – Strawberry

+0

メディアンを定義してください。 –

答えて

0

をしないのですでどこ教えてくださいオペレーターDIV

/ 2(2で割り、2倍の浮動小数点になります)または* 0.5(半分の倍数で固定小数点10進数になります)を使用して回避する必要があると思います。 INT()を使用して、それはいつも切り捨てて、INT(0.9) == 0INT(-0.1) == -1ですが、COUNTの設定関数(基数)は負の値を返すことができないので、期待される結果を得るはずです。

SELECT INT((COUNT(*) + 1)/2) FROM Table1 
0

私は次のクエリを試しました。今すぐ正常に動作します

SELECT Age as Median FROM 
    (SELECT a1.Age, COUNT(a1.Age) as Rank 
    FROM Table1 a1, Table1 a2 
    WHERE a1.Age < a2.Age OR a1.Age=a2.Age 
    group by a1.Age 
    order by a1.Age desc) a3 
    WHERE Rank =(SELECT INT((COUNT(*) + 1) *0.5) FROM Table1); 
関連する問題