0

目标是“显示球队名称和总进球数。

答案是:

SELECT eteam.teamname, COUNT(goal.teamid)
FROM eteam JOIN goal ON id=teamid
GROUP BY eteam.teamname

我不明白为什么我们按 eteam.teamname 而不是 goal.teamid 分组。我们不应该按goal.teaid 分组,而是将下面的两个“RUS”条目合并为一个吗?

这两个数据库,或者你可以去这里问题 9

        eteam
id  teamname         coach
POL Poland           Franciszek Smuda
RUS Russia           Dick Advocaat
CZE Czech Republic   Michal Bilek
GRE Greece           Fernando Santos



         goal
matchid teamid  player                gtime
1001    POL     Robert Lewandowski      17
1001    GRE     Dimitris Salpingidis    51
1002    RUS     Alan Dzagoev            15
1001    RUS     Roman Pavlyuchenko      82
4

2 回答 2

1

在此示例中,您可以在子句id中使用teamid或并获得相同的结果。teamnameGROUP BY

我们不应该按goal.teamid 分组,而是将下面的两个“RUS”条目合并为一个吗?

让我们看一下以下查询:

SELECT eteam.teamname 'Team Name', COUNT(goal.teamid) 'Total Goals'
  FROM eteam JOIN goal ON eteam.id=goal.teamid
  GROUP BY goal.teamid
  ORDER BY eteam.teamname

由于 join 子句,eteam.id 与 goal.teamid 相同。由于 eteam.teamname 是不同的(没有两个团队具有相同的名称)并且对应于 eteam.id,因此按这些字段中的任何一个进行分组都会给出相同的结果。

于 2013-03-14T16:56:40.493 回答
1

您需要按 eteam.teamname 分组以列出每个团队。然后计数在每个组内工作。

一个经常看到

SELECT eteam.teamname, COUNT(eteam.teamname)
FROM eteam JOIN goal ON id=teamid
GROUP BY eteam.teamname

计算组中的记录数。有时它是 COUNT(*) 或 COUNT(id),其中 id 是主键。

COUNT(eteam.teamname) 和 COUNT(goal.teamid) 之间的区别在于,第一个会计算记录的数量,因为每条记录都会有一个团队名称,而 count(goal.teamid) 不会包含 NULL,所以它只会添加提高目标。

于 2013-03-14T16:52:21.383 回答