2012-12-19 11 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

आप शायद 'एसयूएम (एबीएस (100-स्कोर)) चाहते हैं, कुल डिफेंसेंस – Shmiddty

+0

धन्यवाद श्मिटी, जिसने चाल की है! –

उत्तर

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

मैं कहूंगा कि आपका मतलब है 'एवीजी (एबीएस (100-स्कोर)) ' – nothrow

+0

उदाहरण के अनुसार, मुझे लगता है कि ओप मतभेदों को जोड़ना चाहता है और उन्हें – Damp

+0

औसत नहीं मानता है, मुझे लगता है कि @ डैम्प सही है। मैंने अपना जवाब संशोधित कर दिया है लेकिन उसने मुझे सही जवाब में मार दिया। –

संबंधित मुद्दे