SQL查询加入问题

时间:2013-03-07 21:06:32

标签: sql join

我有两张表login_activityevent_details。表的结构如下:

Login_activity
activity_id   |  student_id   |  login_date  | event_id

event_details
event_id   |  event_name   |  event_date

我需要从与event_id匹配的student_id中获取login_activityevent_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 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我相信你想在WHERE子句之后使用'GROUP BY student_id'。

答案 2 :(得分: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_id或适当的日期替换event_name。

答案 3 :(得分:1)

您需要内部联接或左联接来组合数据以获得所需内容。然后,您可以使用group by并使用您的事件ID。要获得计数,您可以使用count命令,您可以将新字段作为例如count(l.student_id)作为studentCount。