MYSQL - 返回具有最大值的完整行并将其加入另一个表
Posted
技术标签:
【中文标题】MYSQL - 返回具有最大值的完整行并将其加入另一个表【英文标题】:MYSQL - Return the complete row with the maximum value for a group and join it to another table 【发布时间】:2021-04-21 22:33:01 【问题描述】:我目前在使用 mysql 查询时遇到问题。我搜索了许多 *** 问题以寻找答案,但找不到答案。
问题: 我有两张桌子-
teams = |id(主键)|name|sigma|mu|
排名 = |match_id|team_id|mu|sigma|
teams 表包含 team_id、name 以及 sigma 和 mu(稍后会详细介绍)。 team.id 还可以作为队伍中 team_id 的外键。 Ranks 包含比赛 id 和球队 id 以及 mu 和 sigma。
基本上,我想为每个团队 id 找到最大的匹配 id,并将相应的 mu 和 sigma(来自排名表)分配给团队表中的正确团队。换句话说,我希望 team 表中的每个团队都有对应于最大 match_id 的 sigma 和 mu 值。
我尝试了下面的MYSQL命令:
-- these will serve as the basis for the procdures which update the teams...
SELECT
MAX(ranks.match_id) as max_match,
ranks.team_id as team_id,
teams.id,
teams.name,
ranks.match_id,
ranks.team_id,
FROM
ranks
JOIN teams ON teams.id = team_id
UPDATE
teams
SET
teams.mu = ranks.mu, teams.sigma = ranks.sigma
WHERE
max_match = ranks.match_id
AND team_id = ranks.team_id
这样做我得到一个错误。提前感谢您的帮助。
另外我担心我无法做到这一点可能是由于我对 MYSQL 的理解存在重大错误,所以任何帮助解释我出错的地方都将不胜感激。
【问题讨论】:
将示例表数据添加到您的问题中会更容易理解。 【参考方案1】:如果我理解正确,您希望 update
具有“最近” mu 和 sigma 值的团队。您可以将update
与join
和窗口函数一起使用:
update teams t join
(select r.*,
row_number() over (partition by team_id order by match_id desc) as seqnum
from ranks r
) r
using (team_id)
set t.mu = r.mu,
t.sigma = r.sigma
where seqnum = 1;
【讨论】:
以上是关于MYSQL - 返回具有最大值的完整行并将其加入另一个表的主要内容,如果未能解决你的问题,请参考以下文章