解释COUNT和GROUP BY

时间:2013-03-14 16:45:16

标签: mysql sql

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

答案是:

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

2 个答案:

答案 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子句中使用teamidteamnameGROUP 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,因此按任何这些字段进行分组将得到相同的结果。