我有两张表login_activity
和event_details
。表的结构如下:
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的数量。 我知道必须有一个简单的解决方案,但我似乎无法得到它。我错过了什么?
答案 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。