2011-07-27 35 views
2

我有一個數據庫表,它有三個相關的字段,首先是一個用戶ID,然後一個是提交節點的數量,另一個是每個節點的「分數」的總和。SQL計算兩個字段的平均值

我需要能夠運行一個查詢,它將返回具有最高平均分數的用戶,但我的SQL-fu不是它的可能位置。

乾杯!

+0

每個用戶只有一行嗎? – Jacob

+0

是的,我的字段是user_id(int),total_nodes(int)和total_score(int) – Conor

+0

您可能想要更改問題的標題 - 所需的是_not_「兩個字段的平均值」。 –

回答

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 

祝你好運!

-Michael

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