使用mysql查找平均值

时间:2016-01-05 19:52:40

标签: mysql database

我刚刚开始学习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

这很有效,但我想知道是否有更简单的代码,所以我不必编写目标表中的所有列。谢谢!

3 个答案:

答案 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

我无法想起第二个更简单的代码。