Мой текущий запрос читает:
SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate FROM `entry_rate` WHERE 1 GROUP BY entry_id
cat_id относится к разным категориям: 1, 2, 3 или 4
cat_id
Есть ли способ найти максимальное среднее значение для каждого пользователя в каждой категории без настройки дополнительной таблицы? Возвращение может составлять 4 максимальных значения avg_rate для каждого user_id
Посетите ссылку ниже, например:
http://lh5.ggpht.com/_rvDQuhTddnc/S8Os_77qR9I/AAAAAAAAA2M/IPmzNeYjfCA/s800/table1.jpg
Возможно, не самый эффективный способ:
select user_id, cat_id, MAX(avg_rate) FROM ( SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate FROM entry_rate GROUP BY entry_id, user_id, cat_id) t GROUP BY user_id, cat_id
Вы можете сделать это заявление.
SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate FROM 'entry_rate' GROUP BY entry_id order by AVG( rating ) DESC limit 1
это приведет к порядку результата на avg(rating) и выберет первую строку. и может сделать limit 1, 1, чтобы выбрать второй максимальный элемент
avg(rating)
limit 1
1
SELECT s.user_id,s.cat_id,max(s.avg_rate) FROM ( SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate FROM entry_rate GROUP BY entry_id,user_id,cat_id) as s GROUP BY s.user_id,s.cat_id