我有一个名为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)
请告诉我在哪里缺席
答案 0 :(得分:0)
我认为MS Access SQL没有DIV
运算符。
我认为您需要使用/ 2
(除以2导致双浮点数)或* 0.5
(多次减半,产生一个十进制的固定点)来解决它,然后取整数部分,例如:使用INT()
,注意它总是向下舍入以便INT(0.9) == 0
和INT(-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);