SQL ROUND AVG

时间:2015-02-02 20:51:11

标签: sql

我有两张桌子:

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岁的人。 有人知道我怎么能忍受这个?谢谢,对不起我的英语。

1 个答案:

答案 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()