2016-11-04 4 views
0

Я хочу объединить две таблицы и получить результат, как показано ниже. Кроме того, я хочу получить значение AVG активности на основе идентификатора пользователя. Я пытался это:Как объединить данные по ID и рассчитать среднее значение, sql

SELECT Users.ID, (SELECT AVG(Activity) FROM Activity) AS AVG_Activity, Users.Date_started 
FROM Users 
INNER JOIN Activity 
ON Users.ID=Activity.ID 
ORDER BY `ID`; 

Но это дает мне результат, где у меня есть ID строки, как в таблице (активность пользователя с ID 1, 2,3 показаны более чем один раз), AVG_activity строка показывает все средние активности пользователей значение, не сгруппированное по идентификаторам и дате начала, в порядке, основанном на идентификаторах пользователя.

Пользователи таблица:

ID Date_started 
1 2016-08-03 
2 2016-09-12 
3 2016-09-13 

активность таблица:

ID Activity Activity_Date 
1  0.5  2016-09-01 
2  0.5  2016-10-01 
3  0.7  2016-10-01 
1  0.1  2016-10-01 
1  0.2  2016-11-01 
2  0.5  2016-11-01 
3  0.8  2016-11-01 

Результат, который я хочу:

ID AVG_Activity Date_started 
1   0.26  2016-08-03 
2   0.5  2016-09-12 
3   0.75  2016-09-13 
+1

Должно ли не среднее значение 'ID = 1'' 0,8/3'? – Lamak

+0

Oups, Исправлено! – Martins

ответ

0

Вам просто нужно использовать GROUP BY:

SELECT U.ID, 
     AVG(A.Activity) AVG_Activity, 
     U.Date_started 
FROM Users U 
INNER JOIN Activity A 
ON U.ID = A.ID 
GROUP BY U.ID, U.Date_started; 
+0

Отлично! Благодаря! – Martins

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