3

我有两张桌子login_activityevent_details. 表的结构如下:

Login_activity
activity_id   |  student_id   |  login_date  | event_id

event_details
event_id   |  event_name   |  event_date

我需要从匹配event_id的.student_idlogin_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

4 回答 4

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
于 2013-03-07T21:08:30.127 回答
2

我相信您会希望在 WHERE 子句之后使用 'GROUP BY student_id'。

于 2013-03-07T21:23:28.950 回答
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 或日期。

于 2013-03-07T21:12:32.120 回答
1

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

于 2013-03-07T21:18:03.863 回答