来自子查询的MySQL,父组由
我需要显示我们管理的一项运动的排名列表 它需要从每个玩家可能有数百个结果的表格中总结出每个玩家的4个最佳结果,然后将整个列表从得分最多的玩家排序到得分最少的玩家 下面的查询返回 错误1054 42S22:“where子句”中的未知列“r1.user_id” 所以我在某个地方偏离了轨道来自子查询的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
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;