2013-11-11 3 views
-3

У меня есть три разных таблицы для 3 различных видов деятельности. Общее поле - user_id.Как получить общее количество событий из разных таблиц в Mysql

Производительность:

id | user_id | date | mark  
1 | 123  | xx | 20 
2 | 456  | xx | 10 
3 | 789  | xx | 5 
4 | 123  | xx | 10 
5 | 456  | xx | 10 
6 | 789  | xx | 5 

Внутренние мероприятия:

id | user_id | date | mark  
1 | 123  | xx | 20 
2 | 456  | xx | 10 
3 | 789  | xx | 5 
4 | 123  | xx | 10 
5 | 456  | xx | 10 
6 | 789  | xx | 5 

Другие виды деятельности:

id | user_id | date | mark  
1 | 123  | xx | 20 
2 | 456  | xx | 10 
3 | 789  | xx | 5 
4 | 123  | xx | 10 
5 | 456  | xx | 10 
6 | 789  | xx | 5 

Как выборки каждой пользовательские метки во всех 3-х таблиц для и сортировки в DESC , Результат должен быть, как

id | user_id | mark  
1 | 123  | 90 
2 | 456  | 60 
3 | 789  | 30 

Заранее спасибо

+0

Вы можете выполнить 'UNION' всех 3-х таблиц, а затем применить' GROUP BY' на результат. –

+3

Как вы рассчитали отметку 30 для user_id 123? –

+1

Что вы пробовали? –

ответ

1

Попробуйте это:

SELECT p.id, p.user_id, SUM(p.mark) FROM Performance p 
LEFT JOIN Internal Activities ia ON p.id=ia.id 
LEFT JOIN Other Activities oa ON ia.id=oa.id 
GROUP BY p.user_id; 
2
SELECT tmp.ID,tmp.USER_ID,tmp.SUM(mark) 
FROM 
(select * from Performance 

union all 

select * from Internal_Activities 

union all 

select * from Other_Activities 
) as tmp 
group by tmp.USER_ID 

Примечание: - Почему вы держите 3 отдельную таблицу с той же самой схеме, не могу ли вы сделать это один?

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