You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询由其他查询生成的表?获取指定ID用户的serial_num

解决方法:通过ID查询用户的余额排名serial_num

你的问题出在子查询里不能直接包含SET语句,原来的写法把变量初始化和查询语句混在一起当子查询,违反了SQL语法规则。下面给你两种可行的解决方案:

方法一:在子查询中初始化用户变量(兼容低版本MySQL)

把变量初始化放到子查询的FROM子句里,确保排序时能正确生成serial_num,再在外层过滤指定ID:

SELECT serial_num, ID, Balance
FROM (
    SELECT 
        (@row_num := @row_num + 1) AS serial_num,
        ID,
        Balance
    FROM users, (SELECT @row_num := 0) AS init_var
    ORDER BY Balance DESC
) AS ranked_users
WHERE ID = '目标用户ID';

这里的(SELECT @row_num := 0) AS init_var会在执行子查询前完成变量初始化,保证排名从1开始计算。

方法二:使用窗口函数(MySQL 8.0+ 推荐)

如果你的MySQL版本是8.0或以上,用ROW_NUMBER()窗口函数更简洁,无需手动维护用户变量:

SELECT serial_num, ID, Balance
FROM (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY Balance DESC) AS serial_num,
        ID,
        Balance
    FROM users
) AS ranked_users
WHERE ID = '目标用户ID';

窗口函数会自动按余额降序生成连续的排名序号,语法清晰易读。

内容的提问来源于stack exchange,提问作者Eliot Chignell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:20:14