使用SQL计算列的中位数

时间:2016-10-12 07:16:14

标签: sql ms-access

我有一个名为Table1的示例表。在表中有两列ID和Age。我想计算年龄中位数。 为此我已经提出了以下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)

请告诉我在哪里缺席

2 个答案:

答案 0 :(得分:0)

我认为MS Access SQL没有DIV运算符。

我认为您需要使用/ 2(除以2导致双浮点数)或* 0.5(多次减半,产生一个十进制的固定点)来解决它,然后取整数部分,例如:使用INT(),注意它总是向下舍入以便INT(0.9) == 0INT(-0.1) == -1,但由于COUNT设置函数(基数)不能返回负值,您应该得到预期的结果,例如

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

答案 1 :(得分: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);