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来识别球员。在我当前的项目中,这将对其他问题有很大帮助。