2012-12-19 16 views
6

Ho una tabella di MySQL dove ho ottenuto una lista di numeri, raccolti da un gioco in cui gli utenti devono fare clic su un pulsante per avvicinarsi a 100.Come posso contare il numero medio più vicino a 100?

ho pensato di usare AVG(), ma questo non funzionerà ovviamente, perché quando hai 0 e 200, sembrerà come se avessi totalizzato un 100 perfetto.

Quello che mi serve è che ogni round (ci sono 10) conti quanto è lontano da 100 il numero e conteggia quelli.

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

quello che avevo, ma è ovviamente imperfetto:

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

Penso che dovresti avere una sottoquery che trova le differenze e poi la media. –

+1

Probabilmente vorrai 'SUM (ABS (100-score)) AS TotalDifference' – Shmiddty

+0

Grazie Shmiddty, ha fatto il trucco! –

risposta

7

Questo dovrebbe farlo

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 conterrà i valori di differenza accumulati

+0

Grazie. Questo fa il trucco! –

1

si può essere in grado di risolvere la query per restituire il valore assoluto di vedere fino a che punto un punteggio da un dato valore (100 in il vostro caso)

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

Direi che intendevi "AVG (ABS (100-score))" – nothrow

+0

Come per l'esempio, penso che l'op vuole riassumere le differenze e non la media. – Damp

+0

Sì, penso che @Damp sia corretto. Ho modificato la mia risposta ma mi ha battuto per la risposta corretta. –

Problemi correlati