【发布时间】:2022-01-07 12:25:05
【问题描述】:
团队
| ID | TEAM_NAME |
|---|---|
| 1 | Arsenal |
比赛
| ID | DATE | HOME_TEAM_ID | AWAY_TEAM_ID | HOME_SCORE | AWAY_SCORE |
|---|---|---|---|---|---|
| 1 | 2018-08-10 | 10 | 7 | 2 | 1 |
国家
| ID | NATION_NAME |
|---|---|
| 1 | Spain |
玩家
| ID | NAME | NATION_ID | TEAM_ID |
|---|---|---|---|
| 100 | David de Gea | 1 | 10 |
目标
| GOAL_ID | MATCH_ID | PLAYER_ID | GOAL_ORDER | OWN_GOAL |
|---|---|---|---|---|
| 1 | 1 | 106 | 1 | False |
我试图从上面的数据库(SQL Server)中计算出主场进球最多的球队的英格兰球员人数。
我的查询:
SELECT TOP 1 COUNT(PLAYER.PLAYER_ID), MAX(HOME_SCORE)
FROM PLAYER
JOIN NATION ON PLAYER.NATION_ID = NATION.NATION_ID
JOIN MATCH ON MATCH.HOME_TEAM_ID = PLAYER.TEAM_ID
WHERE NATION.NATION_NAME = 'England'
GROUP BY PLAYER.PLAYER_ID
ORDER BY MAX(MATCH.HOME_SCORE) DESC
它给出了max(home_score) 的正确答案,但该队的英国球员人数不正确。
【问题讨论】:
-
请提供minimal reproducible example,包括样本数据和所需结果。 (问题需要独立,不需要外部链接才能完成)。
-
不要混合使用隐式连接语法
match, player(近 30 年前已经过时,使用 ANSI92),与显式连接语法player JOIN nation ON...。相反,在match和player之间使用JOIN关键字,然后指定该联接的条件。 (目前,无论该玩家是否参与了那场比赛,您都加入了每一场比赛。) -
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
edit 任何新信息直接进入您的问题。
-
我强烈推荐表别名以避免在每次引用中都输入整个表名。
标签: sql sql-server tsql