2015-02-02 3 views
1

내가 가진 그 두 테이블 :SQL 라운드 AVG

Evaluation 
id_student teste 
----------- ----- 
1   16 
1   10 
1   20 
1   13 

Student 
id   name 
----------- ------ 
1   Jonh 

내가 1 내가 그 쿼리에 사용되는 ID를 가진 학생에 대한 열 "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를하면 1475를 반환합니다. 이미 숫자를 반올림하기 위해 ROUND를 시도했지만 쿼리는 15를 반환합니다. 14의 instaed. 누군가는 내가 이것을 soulve 할 수있는 방법을 알고 있습니까? 고마워하고 미안 해요 내 영어.

답변

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을 제거했습니다.

연산은 정수를 반환 정수 4로 나눈 59의 정수이고 때문에, 14하지 15을 반환 - 그래서 반올림하지 잘린다. 어떤 종류의 10 진수/부동 표현으로 변환하여이 문제를 해결할 수 있습니다. 종종 가장 쉬운 방법은 단지 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()을 적용 할 수 있습니다.

+1

내 열 teste는 약간입니다. –

+1

@youarebannedfromStackoverf'tinyint' 여전히 정수 연산을 사용합니다 –

+1

쿼리를 tryied하고 14.7500000을 반환 한 다음 ROUND (AVG (e.teste * 1.0), 0)를 실행하고 15.0000000을 반환했습니다. –