gpt4 book ai didi

mysql - 在复合 MySQL 语句中使用 max 和 limit

转载 作者:行者123 更新时间:2023-11-29 06:40:49 24 4
gpt4 key购买 nike

我尝试在单个 SQL 语句中执行一个简单的过程。

我有一个玩家表(称为 tplayers),其中列指示他们的 userid 和 tourneyid 是什么,还有一个“playerpoints”列。我还有一个名为“tscores”的表,其中包含分数、一个用户 ID 和名为“rankpoints”的列 - 我想获取每个玩家排名最高的前 3 行,并将该值放入 tplayers 中相应的用户记录中 - - 全部用于特定的锦标赛编号。

这是查询:

update tplayers p set playerpoints= 
(
select sum(b.mypoints) y from
(
select scorerankpoints as mypoints from tscores t where t.tourneyid=p.tourneyid and p.userid=t.userid and t.scorerankpoints>0 order by scorerankpoints desc limit 3
) as b
) where p.tourneyid='12'

这会生成此错误:“where 子句”中的未知列“p.tourneyid”

我基本上是想从表 tscores 中获取“scorerankpoints”的前 3 个值,并将总和值放入表 tplayers 中称为 playerpoints 的列中,

我想对所有在他们的表格中具有相同 tourneyid 的玩家和分数执行此操作。

似乎对 p.tourneyid 的内部引用未定义...有没有办法在单个语句中执行此操作,还是我必须将其分解?

最佳答案

MySQL 在解析超过一层深度的相关引用时存在问题。这是一个很难解决的问题。

以下使用变量来枚举行,然后在 update/join 中选择正确的行进行聚合:

update tplayers p join
(select ts.userid, sum(ts.scorerankpoints) as mypoints
from (select ts.*,
@rn := if(@userid = userid, 1, @rn + 1) as rn,
@userid := @userid
from tscores ts cross join
(select @rn := 0, @userid := '') const
where ts.tourneyid = '12'
order by ts.userid, ts.scorerankpoints desc
) ts
where rn <= 3
) ts
on p.userid = ts.userid
set playerpoints = ts.mypoints
where p.tourneyid = '12' ;

关于mysql - 在复合 MySQL 语句中使用 max 和 limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687654/

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