У меня есть таблица, содержащая user_id, movie_id, рейтинг. Это все INT, а рейтинги варьируются от 1 до 5.Получение медианы значений столбцов в каждой группе
Я хочу получить средний рейтинг и сгруппировать его по user_id, но у меня есть некоторые проблемы с этим.
Мой код на данный момент:
SELECT AVG(rating)
FROM (SELECT rating
FROM movie_data
ORDER BY rating
LIMIT 2 - (SELECT COUNT(*) FROM movie_data) % 2
OFFSET (SELECT (COUNT(*) - 1)/2
FROM movie_data));
Однако, это, кажется, возвращает среднее значение всех оценок. Как я могу сгруппировать это по user_id, так что я могу увидеть средний рейтинг для пользователя?
Спасибо за ответ. Правильно ли я полагаю, что 'a.user_id' использует идентификатор строки? Не могли бы вы вкратце объяснить, что это позволяет нам делать? Кроме того, это создает некоторые дубликаты, то есть пользователь имеет более чем один средний рейтинг. Можете ли вы объяснить, почему это так? Пример вывода pastebin: http://pastebin.com/9fvih7Q2 –
'rowid' используется как номер строки, но на самом деле он фиксируется при создании таблицы. Итак, действительно, в коде произошла ошибка, я попытался ее исправить, используя новую таблицу TEMPORARY. Попробуйте снова? –
Это отлично работает, спасибо! –