2013-03-07 3 views
3

У меня есть две таблицы login_activity и event_details. Структура таблиц, как показано ниже:Ошибка соединения SQL-запроса

Login_activity 
activity_id | student_id | login_date | event_id 

event_details 
event_id | event_name | event_date 

мне нужно принести event_id и граф student_id из login_activity, которые соответствуют event_id.

Я попытался ниже запрос

select event_id,student_id 
from login_activity 
where login_activity.event_id in (select event_id from event_details); 

Но я не в состоянии получить отчетливое event_id и кол-student_ids для тех. Я знаю, что должно быть простое решение, но я не могу его получить. Что мне не хватает?

ответ

4

Вы должны использовать GROUP BY и COUNT

SELECT l.event_id, count(student_ID) 
FROM login_activity l 
INNER JOIN event_details e ON l.event_id = e.event_id 
GROUP BY l.event_id 

Вы на самом деле не нужна таблица event_details, если вы не хотите, чтобы тянуть в определенном event_name или event_date

SELECT l.event_id, count(student_ID) 
FROM login_activity l 
GROUP BY l.event_id 
+0

Спасибо! Я знал, что у меня что-то не хватает :), и это была группа! –

+0

Отлично. Вы спасли мой день :) – Cdeez

1

ли вам вам нужна таблица event_details вообще для ваших результатов (т. е. вам нужно использовать имя или дату события в вашем запросе)? Если нет, то вы можете просто использовать таблицу login_activity:

select event_id, count(student_id) as student_count from login_activity group by event_id 

Если вы были желающие имя события, он по-прежнему так же, хотя.

select e.event_name, count(l.student_id) as student_count 
    from event_details e 
    left join login_activity l on e.event_id = l.event_id 
    group by e.event_name 

Преимущество соединения слева выше, что вы можете получить результаты для событий, которые не имеют каких-либо входа в деятельность еще, если это применимо. И вы можете заменить event_name на event_id или дату, когда это необходимо.

+0

Да, мне нужны подробности мероприятия, я просто упростил это для вопроса. –

1

Для того, чтобы получить то, что вам нужно, вам нужно либо внутреннее соединение, либо левое соединение. Затем вы можете использовать группу и использовать свой идентификатор события. Чтобы получить счет, вы можете использовать команду count, и вы можете сделать это как новое поле, например count (l.student_id), как studentCount.

2

Я считаю, что вы захотите использовать «GROUP BY student_id» после предложения WHERE.