SQL Join - 列出每个人工作的每种事件的数量

时间:2017-12-03 21:07:37

标签: mysql

全部,有些东西不起作用。我试图列出每个人工作的每种事件的数量。

Out put应包括姓氏,名字,event_type和事件数量。

下面是我写的mysql查询,

select staff.lname, staff.fname, event.event_type, count(event_staff.event_id) 
from `event_staff` 
JOIN event 
ON event.event_id = event_staff.event_id 
JOIN staff 
ON staff.ssn = event_staff.ssn 
group by event_staff.ssn

上述查询的结果:

Result of the above query

以下是表格:

Staff Table Event Table event_Staff table

显然,我的查询结果并没有产生正确的结果。我将不胜感激任何帮助。谢谢。

3 个答案:

答案 0 :(得分:1)

您还应按事件类型进行分组。通常,最好始终按照您未聚合的选定字段进行分组。但是:

group by staff.ssn, event.event_type 

...应该按照staff.lname进行操作,staff.fname在功能上依赖于ssn

答案 1 :(得分:1)

通过您的查询,您将获得一个人工作的总事件(所有类型)的计数。为了计算每种类型的事件,请在event_type clauese中添加group by,它将按预期工作:

select staff.lname, staff.fname, event.event_type, count(event_staff.event_id) 
from `event_staff` 
JOIN event 
ON event.event_id = event_staff.event_id 
JOIN staff 
ON staff.ssn = event_staff.ssn 
group by event_staff.ssn,event.event_type;

希望它有所帮助!

答案 2 :(得分:1)

GROUP BY应该包含SELECT中所有未加聚合的列。我还推荐表别名:

select s.lname, s.fname, e.event_type, count(es.event_id) 
from event_staff es JOIN
     event e
     ON e.event_id = es.event_id JOIN
     staff s
     ON s.ssn = es.ssn 
group by s.lname, s.fname, e.event_type;

从您的角度来看,真正重要的是在event_type中加入GROUP BY

注意:您仍然可以按ssn进行汇总 - 如果两个不同的工作人员可能具有相同的名称,这一点很重要。