2012-12-19 119 views
6

我有一個MySQL表,其中我有號碼的列表,從遊戲收集,用戶必須點擊一個按鈕去接近100如何計算最接近100的平均數?

我想我會用AVG(),但是這是不行的顯然,因爲當你有0和200時,它會看起來好像你取得了一個完美的100.

我需要的是每一輪(有10)計數離100有多遠,並計數那些。

Example: 
User A: 98 + 102 + 102 = 6 (something) Loser! 
User B: 95 + 100 + 100 = 5 (something) Winner! 

我有什麼,但顯然是有缺陷的:

SELECT user_id, AVG(score) AS Average, (100-AVG(score)) AS Difference, 
DATE(playtime) AS Playdate 
FROM playtable 
GROUP BY user_id, DATE(playtime) 
ORDER BY Playdate DESC, user_id 
+0

我認爲你應該有一個子查詢找出差異,然後平均。 –

+1

你可能會希望'SUM(ABS(100分))AS TotalDifference' – Shmiddty

+0

謝謝Shmiddty,那就是訣竅! –

回答

7

這應該這樣做

SELECT user_id, SUM(ABS(100-score)) as cumulative_error, 
    DATE(playtime) AS Playdate 
FROM playtable 
GROUP BY user_id, DATE(playtime) 
ORDER BY Playdate DESC, user_id 

cumulative_error將包含累計差異值

+0

謝謝。這就是訣竅! –

1

您可能能夠解決您的查詢返回的絕對值看比分多遠從給定值(100你的情況)

SELECT user_id, AVG(score) AS Average, SUM(ABS(100 - score)) AS Difference, 
DATE(playtime) AS Playdate 
FROM playtable 
GROUP BY user_id, DATE(playtime) 
ORDER BY Playdate DESC, user_id 
+0

我想說你的意思是'AVG(ABS(100分))' – nothrow

+0

按照這個例子,我認爲這個op想總結差異而不是平均值 – Damp

+0

是的,我認爲@Damp是正確的。我已經修改了我的答案,但是他毆打我以得到正確答案。 –