我有3张看起来像这样的表:
地点:id,name
活动:id,name,locationid
参与者:id,name,eventid
我想要的是一个查询,它返回所有位置,与之关联的事件的计数以及与位置相关联的参与者(间接)的计数。
这就是我正在尝试的,但是此查询会为每个锦标赛返回一行,而不是对其进行分组:
SELECT a.id,a.name,count(b.id),count(c.id) FROM Locations a
LEFT JOIN Events b ON a.id=b.locationid
LEFT JOIN Participants c ON b.id=c.eventid
GROUP BY b.locationid,c.eventid
答案 0 :(得分:2)
一种方法是使用count(distinct)
代替count()
。
SELECT l.id, l.name, count(distinct e.id), count(distinct p.id)
FROM Locations l LEFT JOIN
Events e
ON l.id = e.locationid LEFT JOIN
Participants p
ON e.id = p.eventid
GROUP BY l.id, l.name;