如何从具有聚合函数的连接表中选择属性?

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

以上是关于如何从具有聚合函数的连接表中选择属性?的主要内容,如果未能解决你的问题,请参考以下文章

从 jsonb 数组包含具有特定属性的元素的表中选择

如何使用 Nhibernate 从连接两个具有所有 id 的表中选择只有一个不同列的多个列是 UNIQUEIDENTIFIER

如何连接表以选择连接表中的最大行? [复制]

如何在具有子句的聚合函数旁边选择相应的记录

SQL从具有内连接和限制的两个表中选择[重复]

SQL从具有内连接和限制的两个表中选择[重复]