2016-04-01 7 views
-1

Я пытаюсь получить среднее значение для каждого пользователя, где смещение как можно ближе к значению, которое я установил (но все равно удалю это значение).Среднее значение результатов из группы по

select id, max(likes), user_id 
from lookups 
where offset < 30 
group by media_id; 

выше запрос будет возвращать что-то вроде этого:

id likes user_id 
1  2  1 
2  7  1 
3  6  1 
4  9  2 
5  5  2 
6  5  2 
7  2  3 
8  3  3 

я хочу, чтобы превратить это в среднестатистические подобные для каждого пользователя, не считая строки, которые не будут возвращены в приведенном выше запросе, так что результатом этого будет:

average_likes  user_id 
    5    1 
    6.333   2 
    2.5   3 

Как я могу это сделать с помощью sql?

+0

же, как и 'MAX()' вы можете использовать 'AVG()' –

+2

Ваш запрос не имеет никакого смысла. Вы агрегируете 'media_id', но выбираете неопределенные значения' user_id' и 'id'. –

+0

В моем случае это не имеет особого значения, так как на носителе всегда есть один и тот же пользователь, поэтому все строки с media_id 5 также будут иметь идентификатор пользователя 2 и т. Д., И я действительно не хотел вообще вытаскивать идентификатор. –

ответ

0

Палка запрос в подзапрос и GROUP BY снова:

SELECT user_id, 
    avg(maxlikes) 
FROM (
    SELECT id, 
     max(likes) AS maxlikes, 
     user_id 
    FROM lookups 
    WHERE offset < 30 
    GROUP BY ID, user_idd 
    ) subquery 
GROUP BY user_id 
+0

Подзапрос будет возвращать произвольные 'id' и' user_id' в каждой группе 'media_id', а не те, которые относятся к строке с максимальными симпатиями. – Barmar

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