我刚刚开始学习MySQL,我从sqlzoo.net
获得了这些表格game
id mdate stadium team1 team2
1001 8 June 2012 National Stadium, Warsaw POL GRE
1002 8 June 2012 Stadion Miejski (Wroclaw) RUS CZE
1003 12 June 2012 Stadion Miejski (Wroclaw) GRE CZE
1004 12 June 2012 National Stadium, Warsaw POL RUS
...
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
...
我使用以下代码显示目标时间超过20的匹配ID
SELECT goal.matchid
FROM game, goal
WHERE game.id = goal.matchid AND goal.gtime > 20
虽然效果很好,但现在我想显示目标时间平均超过20的匹配ID,但我不知所措。
还有一个问题!
例如我还有1个表:coach(id,teamid,coachname)我希望通过显示coach中的所有列和coachname列中的所有列来找到25-50(gtime)之间的所有目标
SELECT matchid, goal.teamid, player, gtime, coachname
FROM goal JOIN coach ON (goal.teamid=coach.teamid)
WHERE gtime BETWEEN 25 AND 50
这很有效,但我想知道是否有更简单的代码,所以我不必编写目标表中的所有列。谢谢!
答案 0 :(得分:3)
可能你正在寻找像这样的事情
SELECT goal.matchid
FROM game, goal
WHERE game.id = goal.matchid
having avg(goal.gtime) > 20
group by goal.matchid
答案 1 :(得分:1)
您甚至不需要game
表和此结果的连接。
select matchid
from goal
having avg(gtime) > 20
group by matchid
另一个答案在where
上保留了gtime > 20
子句过滤器。如果您这样做,那么在第20分钟之后所有与目标的匹配将具有符合该有限数据集的平均值。换句话说,所有大于20的值的平均值也将超过20。 avg()
聚合仅适用于使其超过where
条件的行。
答案 2 :(得分:-1)
您可以使用AVG()函数查找平均值。
SELECT goal.matchid
FROM game, goal
WHERE AVG(goal.gtime) > 20
我无法想起第二个更简单的代码。