如何使用聚合函数从联接表中获取 select 属性?

How to select attribute from joined tables with aggregate function?

这是三个示例表

团队

+-------------+-------------+
| TeamID      | TeamName    |             
+-------------+-------------+
| 11          | AA          | 
+-------------+-------------+
| 12          | BB          | 
+-------------+-------------+
| 13          | CC          |
+-------------+-------------+

匹配

+-------------+
| MatchID     |        
+-------------+
| 1           |
+-------------+
| 2           | 
+-------------+
| 3           | 
+-------------+

团队赛

+-------------+-------------+-------------+
| TmID        | Team_ID     |  MatchID    |
+-------------+-------------+-------------+
| 21          | 11          | 1           |
+-------------+-------------+-------------+
| 22          | 11          | 2           |
+-------------+-------------+-------------+
| 23          | 12          | 1           |
+-------------+-------------+-------------+
| 24          | 13          | 2           |
+-------------+-------------+-------------+
| 24          | 11          | 3           |
+-------------+-------------+-------------+

目标是列出 TeamName 他们参加比赛不止一次的地方,如下所示:

+-------------+
| TeamName    |             
+-------------+
| AA          | 
+-------------+

这是我试过的:

SELECT TeamName 
FROM  Team T, Match M, Teammatch TM
WHERE T.TeamID = TM.TeamID AND
M.MatchID = TM.MatchID
......

但是我真的不知道下一步该做什么。

我以前用SELECT COUNT问过类似的问题,但是我不太明白这里的子查询怎么写。

尝试

    SELECT TeamName 
    FROM  Team T 
    JOIN  Teammatch TM ON T.TeamID = TM.TeamID
    JOIN  Match M ON M.MatchID = TM.MatchID
    GROUP BY TeamName
    HAVING COUNT(*) > 1

当然,您可以将 COUNT(*) 替换为 COUNT(DISTINCT M.MatchID) 或类似的。

未测试,但像下面这样的查询应该有效。按 T​​eamID 分组以获得每个团队一行,然后按计数聚合 MatchID 以获得该团队的比赛数。在该计数上使用 HAVING 语句限制显示的结果。

SELECT T.TeamName
FROM TeamMatch TM
    JOIN Match M ON M.MatchID = TM.MatchID
    JOIN Team T ON t.TeamID = TM.TeamID
GROUP BY TeamID
HAVING COUNT(MatchID) > 1