2012-12-19 25 views
6

Tôi có bảng MySQL nơi tôi có danh sách số, được thu thập từ trò chơi mà người dùng phải nhấp vào nút để đến gần 100.Làm cách nào tôi có thể đếm số trung bình gần 100 nhất?

Tôi nghĩ mình muốn sử dụng AVG(), nhưng điều này sẽ không hoạt động rõ ràng, bởi vì khi bạn có 0 và 200, nó sẽ giống như bạn đã ghi 100 hoàn hảo.

Điều tôi cần cho mỗi vòng (có 10) đếm cách xa 100 số và đếm số đó.

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

gì tôi đã có, nhưng rõ ràng là thiếu sót:

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

Tôi nghĩ bạn nên có truy vấn phụ để tìm sự khác biệt, và sau đó là trung bình. –

+1

Có thể bạn sẽ muốn 'SUM (ABS (100 điểm)) AS TotalDifference' – Shmiddty

+0

Cảm ơn Shmiddty, đã làm được điều đó! –

Trả lời

7

này nên làm điều đó

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 sẽ chứa các giá trị chênh lệch tích lũy

+0

Cảm ơn. Điều đó làm các trick! –

1

Bạn có thể để sửa chữa truy vấn của bạn để trả lại giá trị tuyệt đối để xem cách xa điểm là từ một giá trị nhất định (100 trường hợp của bạn)

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

Tôi muốn nói bạn có nghĩa là 'AVG (ABS (100 điểm)) ' – nothrow

+0

Theo ví dụ, tôi nghĩ rằng op muốn tổng hợp sự khác biệt và không trung bình chúng – Damp

+0

Đúng vậy tôi nghĩ @Damp là chính xác. Tôi đã sửa đổi câu trả lời của tôi nhưng anh ấy đánh tôi với câu trả lời đúng. –

Các vấn đề liên quan