gpt4 book ai didi

mysql - 连接表的平均值

转载 作者:行者123 更新时间:2023-11-29 10:48:52 25 4
gpt4 key购买 nike

我有一个疑问:

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 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 中找到该值,因此此阶段无需加入players

然后,它在子查询的结果和players之间执行INNER JOIN,以便每个playername可能会包含在结果中。我选择在此阶段加入 players 而不是在子查询中加入,因为子查询的结果对于每个 player 仅有一条记录加入子查询的源数据集中的每个玩家,而不是潜在的多个玩家。我希望这将使声明更加高效。

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

如果您有任何问题或意见,请随时发表评论。

关于mysql - 连接表的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com