如何使用聚合函数从联接表中获取 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) 或类似的。
未测试,但像下面这样的查询应该有效。按 TeamID 分组以获得每个团队一行,然后按计数聚合 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
这是三个示例表
团队
+-------------+-------------+
| 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) 或类似的。
未测试,但像下面这样的查询应该有效。按 TeamID 分组以获得每个团队一行,然后按计数聚合 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