目标是“显示球队名称和得分总数。”
答案是:
SELECT eteam.teamname, COUNT(goal.teamid)
FROM eteam JOIN goal ON id=teamid
GROUP BY eteam.teamname
我不明白为什么我们通过eteam.teamname而不是goal.teamid进行分组。我们不应该按目标分组。而是将下面的两个“RUS”条目合并为一个?
两个数据集或您can go here problem 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
答案 0 :(得分: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,因此它只会累计目标。
答案 1 :(得分:1)
在此示例中,您可以在id
子句中使用teamid
,teamname
或GROUP 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,因此按任何这些字段进行分组将得到相同的结果。