MySQL: возможно ли вычислить MAX (AVG (поле))? - PullRequest
2 голосов
/ 13 апреля 2010

Мой текущий запрос читает:

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

Ответы [ 3 ]

4 голосов
/ 13 апреля 2010

Возможно, не самый эффективный способ:

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
3 голосов
/ 19 сентября 2012

Вы можете сделать это заявление.

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

2 голосов
/ 13 апреля 2010
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
...