来自子查询的MySQL,父组由

来自子查询的MySQL,父组由,mysql,sum,subquery,correlated-subquery,Mysql,Sum,Subquery,Correlated Subquery,我需要显示我们管理的一项运动的排名列表 它需要从每个玩家可能有数百个结果的表格中总结出每个玩家的4个最佳结果,然后将整个列表从得分最多的玩家排序到得分最少的玩家 下面的查询返回 错误1054 42S22:“where子句”中的未知列“r1.user_id” 所以我在某个地方偏离了轨道 SELECT r1.user_id, ( SELECT SUM(points) FROM ( SELECT * FROM ranking_matrix_points

我需要显示我们管理的一项运动的排名列表

它需要从每个玩家可能有数百个结果的表格中总结出每个玩家的4个最佳结果,然后将整个列表从得分最多的玩家排序到得分最少的玩家

下面的查询返回

错误1054 42S22:“where子句”中的未知列“r1.user_id”

所以我在某个地方偏离了轨道

SELECT r1.user_id, (
    SELECT SUM(points)
    FROM (
        SELECT *
        FROM ranking_matrix_points r2
        WHERE user_id=r1.user_id
        ORDER BY points DESC
        LIMIT 4
    ) r3
) AS total_points
FROM ranking_matrix_points r1
WHERE
    user.status IN('active')
GROUP BY r1.user_id
ORDER BY total_points DESC

您不需要双重查询,只需

SELECT user_id, SUM(points)
FROM ranking_matrix_points
WHERE user.status in('active')
GROUP BY user_id
ORDER BY total_points DESC
LIMIT 4


一种可能的解决方案可能是按点数降序对每个用户的行进行编号,然后用秩对点数进行汇总。问题是,据我所知,MySQL只允许在相关子查询中进行一级深度范围解析。这将改变查询的整个含义,而不会得到所需的结果,即获得每个用户得分最高的4分之和,而且MySQL不使用topI不查看任何用户2…此查询只询问一个用户及其分数。这两个SQL查询都是错误的。MySQL也不支持TOP。好吧,重新阅读你的解释,糟糕的读者…让我检查一下back@zon7第1项和第2项为清单项目;我想这是因为评论格式不明显。
SELECT TOP 4 user_id, SUM(points)
FROM ranking_matrix_points
WHERE user.status in('active')
GROUP BY user_id
ORDER BY total_points DESC
select user_id, sum(points) total_points
from (
  select user_id, points,
  ( 
    case user_id 
    when @cur_user 
    then @row := @row + 1 
    else @row := 1 and @cur_user := user_id end
  ) as rank
  from ranking_matrix_points,
  (select @row := 0, @cur_user := '') r
  order by user_id, points desc
) t
where rank <= 4
group by user_id;