Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接表的平均值_Mysql_Sql - Fatal编程技术网

Mysql 连接表的平均值

Mysql 连接表的平均值,mysql,sql,Mysql,Sql,我有一个问题: SELECT p.NAME, r.DATE, c.NAME, SUM(hs.result), SUM(h.par), (SUM(hs.result) - SUM(h.par)) AS "Score" FROM hole_scores hs JOIN players p ON hs.player_id = p.id JOIN rounds r ON r.id = hs.session_id JOIN holes h ON h.id = hs.hole_id JOIN c

我有一个问题:

SELECT p.NAME, r.DATE, c.NAME, SUM(hs.result), SUM(h.par), (SUM(hs.result) - SUM(h.par)) AS "Score"
 FROM hole_scores hs
 JOIN players p ON hs.player_id = p.id
 JOIN rounds r ON r.id = hs.session_id
 JOIN holes h ON h.id = hs.hole_id 
 JOIN courses c ON c.id = r.course_id
 GROUP BY p.NAME, r.id
 ORDER BY Score ASC
查询将在第一行中给出此结果:

 NAME       DATE        NAME        SUM(hs.result)  SUM(h.par)  Score
Player 1    29.7.2014   Course 1    50              57          -7
Player 2    7.6.2014    Course 2    48              54          -6
Player 1    22.5.2014   Course 1    51              57          -6
Player 3    6.6.2014    Course 1    52              57          -5
Player 1    19.8.2013   Course 1    53              57          -4
Player 4    1.9.2011    Course 1    56              59          -3
Player 5    15.10.2011  Course 1    56              59          -3
Player 4    2.8.2013    Course 1    54              57          -3
Player 1    3.6.2014    Course 1    54              57          -3
Player 6    8.7.2014    Course 1    54              57          -3
Player 4    16.7.2014   Course 1    54              57          -3
Player 1    21.4.2015   Course 1    53              56          -3
Player 2    23.6.2012   Course 2    52              54          -2

如何获得每位球员的平均分数?

如果您想要平均分数,我想您可以:

SELECT p.NAME, (SUM(hs.result) - SUM(h.par))/COUNT(*) AS "Score"
FROM hole_scores hs JOIN
     players p
     ON hs.player_id = p.id JOIN
     rounds r
     ON r.id = hs.session_id JOIN
     holes h
     ON h.id = hs.hole_id JOIN
     courses c
     ON c.id = r.course_id
GROUP BY p.NAME
ORDER BY Score ASC

请尝试以下方法

SELECT players.id AS player_id,
       players.name AS player_name,
       AVG( Score ) AS avg_score
FROM ( SELECT hole_scores.player_id AS player_id,
              ( SUM( hole_scores.result ) - SUM( holes.par ) ) AS Score
       FROM hole_scores
       JOIN holes ON holes.id = hole_scores.hole_id
       JOIN rounds ON rounds.id = hole_scores.session_id
       GROUP BY hole_scores.player_id,
                rounds.id
     ) AS scoreFinder
JOIN players ON players.id = scoreFinder.player_id
GROUP BY players.id
ORDER BY player_name,
         player_id;
此语句使用基于所提供语句的简化版本的子查询来查找每轮中每个玩家的分数

请注意,通常情况下,不能安全地假设名称是唯一的,因为这通常是可能的,即使通常情况并非如此,两个玩家可以拥有相同的名称。因此,我选择了id值来唯一标识每个玩家。由于此值可以在hole_scores.player_id中找到,因此在此阶段无需加入玩家

然后,它在子查询的结果和播放器之间执行内部联接,以便每个播放器的名称可以包含在结果中。在这个阶段,我选择加入播放器,而不是在子查询中,因为子查询的结果对于每个播放器只有一条记录可加入,而不是子查询的源数据集中每个播放器可能有多条记录。我希望这将使发言稍微更有效率

然后,该语句根据每个玩家的唯一标识符对联接数据集的记录进行分组,并返回每个玩家的id和名称值以及每轮结束时他们的得分平均值


如果您有任何问题或意见,请随时发表相应的意见。

您希望如何显示平均值?在该查询的另一列中?或者使用另一个查询?我真正需要的是球员姓名和他/她的平均分数,所以可以在另一个查询中。所以。。。组的名称和使用:AVGHES.RESULT-H.PAR?看到这是我试过的第一件事,但是如果我添加选择AVGREST和GROUP按P.NETRY:错误:错误代码:1247。引用“Score”不支持对组函数的引用谢谢,但这不能提供正确的数据。我想我会通过将我的数据导出到熊猫数据框来解决这个问题,并从中获得平均值。太好了!谢谢正是我想要的!我自己也尝试使用子查询,但无法正确使用。要学的东西太多了!是的,虽然目前我的数据中没有同名球员,但最好使用id来识别球员。在我当前的项目中,这将对其他问题有很大帮助。