Алгоритм рейтинга MYSQL

У меня есть таблица MYSQL, в которой хранится рейтинг для каждого события пользователя, от 1 до 10 в таблице событий с именем event_rating. То, что я пытаюсь найти, - это самый высокий точный рейтинг, основанный на количестве голосов и рейтинге, подобном этому:

SELECT
 c.userid,
 c.user_name,
 COUNT(d.event_rating) AS votesCount,
 AVG(d.event_rating) AS votesAvg,
 SUM(d.event_rating) AS tsum,
 COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
FROM events d JOIN users c ON d.userid = c.userid WHERE (d.userid = '2') GROUP BY d.userid ORDER BY totalRating DESC

Я добавил два фиктивных рейтинга для пользователя, один с рейтингом 10, а другой с 5.

Результаты ниже:

 userid     user_name      votesCount       votesAvg    tsum      totalRating
   2    Rahul Khanna         2            7.5000        15        7.50000000

Это точно и правильно ли я рассчитал?

--- ИЗМЕНИТЬ ---

Публикация Еще немного результатов

ИСПОЛЬЗОВАНИЕ COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating

userid  user_name   votesCount  votesAvg    tsum    totalRating
2      Rahul Khanna     2       7.5000       15      7.50000000
1      Rita Agnihotri   9       4.8889       44      4.88888889
3      Daniel Springs   4       3.5000       14      3.50000000
4      Roger Myers      6       3.5000       21      3.50000000
5      Chun Tanakat     3       3.0000       9       3.00000000

ИСПОЛЬЗОВАНИЕ COUNT(d.event_rating)*AVG(d.event_rating) as totalRating

userid  user_name   votesCount  votesAvg    tsum    totalRating
1      Rita Agnihotri   9       4.8889       44      44.0000
4      Roger Myers      6       3.5000       21      21.0000
2      Rahul Khanna     2       7.5000       15      15.0000
3      Daniel Springs   4       3.5000       14      14.0000
5      Chun Tanakat     3       3.0000       9       9.0000

--- ЕЩЕ ---

Должен ли я использовать вместо этого ниже?

COUNT(d.event_rating)*AVG(d.event_rating)/10 as totalRating

Что мне нужно, так это точный способ подсчета общего рейтинга с учетом голосов, а также того, что рейтинг должен быть в диапазоне от 1 до 10.

--- ПОДРОБНЕЕ ---

У меня есть одна таблица Users, другая Events, пользователь может добавлять новые события и оценивать эти события. В таблице Events есть столбец eventID, userid, event_rating. Таким образом, каждое событие может содержать рейтинг для события, созданного пользователем. Я хочу рассчитать рейтинг всех событий, чтобы получить максимальный (общий) рейтинг для этого пользователя. Я хочу, чтобы общий рейтинг, который я получаю, был между 1-10 и не превышал 10, независимо от того, сколько событий создал пользователь. Это возможно? если нет никаких решений или идей?

Спасибо за чтение :)


person Zubair1    schedule 02.05.2011    source источник


Ответы (1)


Что это за глупый запрос??

COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating

это ничего

(a*b)/a, который всегда b

вам нужно просто принести AVG(d.event_rating)

чего ты хочешь на самом деле??

person Harish    schedule 02.05.2011
comment
Обновлен мой вопрос с дополнительной информацией и результатами. - person Zubair1; 02.05.2011
comment
Математически проблема все та же: COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating равно AVG(d.event_rating) as totalRating, потому что (a*b)/a равно b. - person Stefan Gehrig; 02.05.2011
comment
Я не уверен, каким будет мое решение. Хотя, чтобы быть более ясным, что я пытаюсь сделать, я обновил свой вопрос более подробно. - person Zubair1; 02.05.2011