Алгоритм оценки MYSQL

#mysql #algorithm #rating

#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.

— БОЛЕЕ ПОДРОБНО —

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

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

Ответ №1:

Что это за глупый фрагмент запроса??

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

Это ничто

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

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

чего вы хотите на самом деле??

Комментарии:

1. Обновил мой вопрос дополнительной информацией и результатами.

2. Математически проблема все та же: COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating равно AVG(d.event_rating) as totalRating , потому что (a*b)/a есть b .

3. Я не уверен, каким было бы мое решение. Хотя, чтобы было более понятно, чего я пытаюсь достичь, я обновил свой вопрос более подробной информацией.