2011-07-27 3 views
2

세 개의 관련 필드가있는 데이터베이스 테이블이 있는데 첫째는 사용자 ID이고, 하나는 제출 된 노드 수이고 다른 하나는 각 노드의 "점수"합계입니다.두 필드의 SQL Compute 평균

가장 높은 평균 점수를 가진 사용자를 반환하는 쿼리를 실행할 수 있어야하지만 SQL-fu는있을 수없는 위치에 있습니다.

건배!

+0

사용자 당 하나의 행만 있습니까? – Jacob

+0

예, 내 필드는 user_id (int), total_nodes (int) 및 total_score (int)입니다. – Conor

+0

질문의 제목을 변경할 수도 있습니다. 원하는 것은 "두 필드의 평균"이 아닙니다. –

답변

2

찾고 있습니다. 그것은 소수를 처리하는 일에 int 데이터 유형을 캐스팅하는 것이 중요하거나 부정확 평균을 얻을 것이다 :

SELECT *, CAST(total_score AS FLOAT)/CAST(total_nodes AS FLOAT) AS average_score 
FROM yourtable 
ORDER BY CAST(total_score AS FLOAT)/CAST(total_nodes AS FLOAT) DESC 

행운을 빕니다!

- 마이클

0
SELECT AVG(user.score) AS avg_score 
FROM user 
GROUP BY user.id 
ORDER BY avg_score DESC 
0

이 시도 :

select userid,max(avgscore) as maxscore 
from 
(select userid,avg(score) as avgscore from usertable group by userid) mytab 
0

Easer이

SELECT AVG(user.score1 + user.score2)/2 as average, userid FROM usertable 
GROUP BY userid 
ORDER BY average 

마음 당신의 데이터 유형이 될 것입니다. 점수가 정수인 경우 먼저 평균을 소수로 변환 할 수 있습니다.

1

여기 당신이 필요로하는 무엇을 당신이

-- Multiplied by 1.0 to convert it to double 
Select top 100 user_id, (1.0 * total_score/total_node) as AvgScore 
From YourTable 
Order By (total_score/total_node) asc