2011-05-02 2 views
0

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

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 

это точно, и я я его расчета правильно?

--- EDIT ---

постить больше результатов

ИСПОЛЬЗОВАНИЕ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 

--- MORE ---

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

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

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

--- более подробно ---

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

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

ответ

2

Что это глупо часть запроса ??

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

В этом нет ничего

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

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

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

+0

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

+0

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

+0

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