如何从具有聚合函数的连接表中选择属性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从具有聚合函数的连接表中选择属性?相关的知识,希望对你有一定的参考价值。
这是三个样本表
球队
+-------------+-------------+
| TeamID | TeamName |
+-------------+-------------+
| 11 | AA |
+-------------+-------------+
| 12 | BB |
+-------------+-------------+
| 13 | CC |
+-------------+-------------+
比赛
+-------------+
| MatchID |
+-------------+
| 1 |
+-------------+
| 2 |
+-------------+
| 3 |
+-------------+
Teammatch
+-------------+-------------+-------------+
| 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(DISTINCT M.MatchID)或类似替换COUNT(*)。
另一答案
未经测试,但下面的查询应该有效。按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
以上是关于如何从具有聚合函数的连接表中选择属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Nhibernate 从连接两个具有所有 id 的表中选择只有一个不同列的多个列是 UNIQUEIDENTIFIER