2010-04-12 1 views
2

Мой текущий запрос гласит:MySQL: Возможно ли вычислить MAX (AVG (поле))?

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

Есть ли способ, что я могу найти максимальное среднее значение для каждого пользователя в каждой категории без настройки дополнительной таблицы? Возвращение потенциально может быть 4 максимум avg_rate для каждого user_id

ниже ссылку, например:

http://lh5.ggpht.com/_rvDQuhTddnc/S8Os_77qR9I/AAAAAAAAA2M/IPmzNeYjfCA/s800/table1.jpg

+0

Спасибо за редактирование Daniel! – Brad

ответ

3

Может быть не самым эффективным способом:

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 
+0

Вам также нужно группировать entry_id и user_id во внутреннем запросе. Также 'WHERE 1' не требуется. –

+0

@BlueRaja, вы правы, я просто скопировал его запрос, который также имеет эти проблемы. Исправлена. – tloflin

+0

@tloflin и @ BlueRaja- oh мой Бог! вы, ребята, волшебники! Я собираюсь это сделать некоторое время без везения (если я новичок ...). СПАСИБО! BTW, что такое 't' для конца 5-й линии? Это единственный элемент, который я не понимаю. – Brad

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 
+0

Это также отличный ответ! Спасибо (но слишком медленно для зеленой галочки!) – Brad

2

You может сделать это утверждение.

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, чтобы выбрать второй максимальный элемент

 Смежные вопросы

  • Нет связанных вопросов^_^