在一个SQL查询中使用2“分组依据”

时间:2017-09-17 22:49:20

标签: mysql sql mysqli

我有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

1 个答案:

答案 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;