我有两张桌子:
Evaluation
id_student teste
----------- -----
1 16
1 10
1 20
1 13
Student
id name
----------- ------
1 Jonh
我想要为id为1的学生做“teste”栏的平均值。 我使用了那个查询:
select ROUND(AVG(e.teste),0) from Student s, Evaluation e
where s.id=e.id_student and s.id=1 group by s.nome
该查询返回值14,但如果我去计算器并执行(16 + 10 + 20 + 13)/ 4它给了我14.75我已经尝试使用ROUND来舍入数字,查询应返回15 14岁的人。 有人知道我怎么能忍受这个?谢谢,对不起我的英语。
答案 0 :(得分:3)
问题可能是使用整数算术计算平均值。您没有指定数据库,但有些确实使用整数运算。这与round()
无关。
试试这个:
select AVG(e.teste)
from Student s join
Evaluation e
on s.id = e.id_student
where s.id = 1;
请注意更改:
join
使用正确的,明确的join
语法。round()
。group by
,因为您似乎只想返回一行。这将返回14
而不是15
,因为计算是整数59除以整数4以返回整数 - 因此它被截断而不是舍入。您可以通过转换为某种十进制/浮点表示来解决此问题。通常最简单的方法是乘以1.0:
select AVG(e.teste * 1.0)
from Student s join
Evaluation e
on s.id = e.id_student
where s.id = 1;
正确计算平均值后,如果愿意,可以应用round()
。