#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. Я не уверен, каким было бы мое решение. Хотя, чтобы было более понятно, чего я пытаюсь достичь, я обновил свой вопрос более подробной информацией.