【发布时间】:2018-11-28 08:52:22
【问题描述】:
我想根据给定用户与其他用户相比的点数来检索用户的排名(简单地计算得分比给定用户多的用户)。
但是,在我尝试过的所有查询中,我总是以Column not found: users.id 结束。据我所知,引用相关父列不止一级是有限制的。
我可以重构我的查询,还是真的需要使用SET @rownum := 0 查询样式?
SELECT
`users`.*,
(
SELECT COUNT(*) + 1
FROM (
SELECT SUM(`amount`) AS `all_points`
FROM `points`
WHERE `type` = ?
GROUP BY `user_id`
HAVING `all_points` > (
SELECT SUM(`amount`)
FROM `points`
WHERE `type` = ? and `user_id` = `users`.`id`
)
) `points_sub`
) as `rank`
FROM `users`
WHERE `users`.`id` = ?
LIMIT 1
【问题讨论】:
-
MySQL 不支持超过一级深度的关联子句。切换到 MySQL 8+ 并使用窗口函数。
-
@GordonLinoff 感谢您的建议。我希望不必为整个应用程序升级 MySQL 版本。
-
。 .这有点半开玩笑。您的问题表明您了解使用变量的另一种方法,所以去吧。
标签: mysql sql subquery correlated-subquery