2012-12-19 14 views
6

Mam tabeli MySQL, gdzie mam listę numerów, zebrane od gry, gdzie użytkownicy muszą kliknąć przycisk, aby zbliżyć się do 100.Jak mogę policzyć średnią liczbę bliską 100?

Myślałam używam AVG(), ale to nie będzie działać oczywiście, ponieważ gdy masz 0 i 200, to będzie wyglądać tak, jakbyś zdobył idealnego 100.

To, czego potrzebuję, to dla każdej rundy (jest 10) policzyć, jak daleko od 100 jest ta liczba i policzyć te.

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

Co miałem, ale jest oczywiście błędna:

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

Myślę, że powinieneś mieć podkwerenda znajdowanie różnic, a następnie średnia. –

+1

Prawdopodobnie będziesz potrzebować 'SUMA (ABS (100-score)) AS TotalDifference' – Shmiddty

+0

Dzięki Shmiddty, udało się! –

Odpowiedz

7

należy to zrobić

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 będzie zawierać skumulowane wartości różnicy

+0

Dzięki. To załatwia sprawę! –

1

Możesz być w stanie naprawić zapytanie zwraca wartość bezwzględną, aby zobaczyć, jak daleko wynik od danej wartości (100 w Twój przypadek)

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

Powiedziałbym, że chodziło o "AVG (ABS (100-score))" – nothrow

+0

Jak na przykładzie, myślę, że op chce zsumować różnice i nie je przeciętnie – Damp

+0

Tak, myślę, że @Damp jest poprawny. Zmieniłem odpowiedź, ale pobił mnie do poprawnej odpowiedzi. –

Powiązane problemy