2016-12-09 11 views
1

Структура таблицыMySQL дисплей вычисленное среднее для всех строк

rating.post_id 
rating.user_id 
rating.rate_like 
rating.rate_dislike 

Образец данных:

rating.post_id = 1 
rating.user_id = 1 
rating.rate_like = 1 
rating.rate_dislike = 0 

rating.post_id = 1 
rating.user_id = 2 
rating.rate_like = 1 
rating.rate_dislike = 0 

rating.post_id = 1 
rating.user_id = 3 
rating.rate_like = 0 
rating.rate_dislike = 1 

С учетом вышеизложенного структура, пост 1 оценивается пользователем 1, 2 и 3, в котором пользователи 1 и 2 проголосовали так, как будто пользователь 3 проголосовал за неприязнь.

С этим, как получить среднее значение, когда рейтинг равен 5 (5) звездам?

формула: (((total rate_like/total votes) * 100) * 0.5)/10 = Rate (round to nearest .5)

Пример: (((2/3) * 100) * 0.5)/10 = 3.33 (round to 3.5)

Rate будет 3.5 из 5 звёзд

Ожидаемый результат MySQL будет:

post_id = 1 
rate_like = 2 
rate_dislike = 1 
total_rating = 3.5 

Вот что я имею сделанный с sql, но я понятия не имею, как сделать это в одном заявлении sql только.

Это получает среднее:

select round(round((((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1) from rating group by post_id

, в котором должны слиться в этом заявлении:

SELECT post_id, sum(rate_like), sum(rate_dislike), (sum(rate_like) + sum(rate_dislike)) from rating group by post_id

Слияние двух заявлений дает ошибку subquery returns more than 1 row:

SELECT post_id, sum(rate_like), sum(rate_dislike), (sum(rate_like) + sum(rate_dislike)), (select round(round((((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1) from rating group by post_id) from rating group by post_id

Добавление предложения where в обоих операциях select решает проблему, но это необходимо для отображения нескольких строк.

+0

Я запутался, вы задаете вопрос, а затем предоставить формулу, отвечая на ваш вопрос. С чем вы пытаетесь получить помощь? Никто здесь не собирается писать код для вас. –

+0

Просто нужно заявление sql. – basagabi

+0

Что вы уже пробовали? Можете ли вы опубликовать инструкцию SQL, с которой вы работаете, что не удалось? –

ответ

0

Nevermind ... смог понять это. Подзапрос используется как объединенная таблица вместо столбца.

SELECT rating.post_id, sum(rate_like), sum(rate_dislike), (sum(rate_like) + sum(rate_dislike)), column_rating from rating inner join ( select post_id, round(round((((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1) as column_rating from rating group by post_id ) as rating_table on rating.post_id = rating_table.post_id group by rating.post_id