【问题标题】:How to select attribute from joined tables with aggregate function?如何从具有聚合功能的联接表中选择属性?
【发布时间】:2019-02-18 06:11:10
【问题描述】:

这是三个示例表

团队

+-------------+-------------+
| 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问过类似的问题,但是我不太明白这里的子查询怎么写。

【问题讨论】:

标签: sql count subquery db2-express-c


【解决方案1】:

试试

    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) 或类似名称。

【讨论】:

  • 我没有看到你的答案,因为它是在我打字时发布的。我们的两个查询几乎相同。
【解决方案2】:

未经测试,但像下面这样的查询应该可以工作。按 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

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多