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

如何根据经验值关联用户表与等级表查询对应等级?

解决方案:根据用户EXP匹配对应等级

针对你的需求,这里提供两种常用的SQL实现方式,同时解答你的疑问:

方法1:使用JOIN结合聚合函数

这种方式通过关联用户表和等级表,筛选出用户EXP大于等于等级EXP的所有记录,再取最大的等级值:

SELECT u.id, u.name, u.exp, MAX(l.level) AS level
FROM user u
JOIN level l ON u.exp >= l.exp
GROUP BY u.id, u.name, u.exp;

执行后会得到你期望的结果:

id|name|exp|level
 1|test|270|3
 2|foo |510|4

方法2:使用子查询

针对每个用户单独查询对应等级,逻辑更直观:

SELECT 
    id, 
    name, 
    exp,
    (SELECT MAX(level) FROM level l WHERE l.exp <= u.exp) AS level
FROM user u;

对你疑问的解答:

  • 是否需要使用JOIN?
    不是必须的,但JOIN是实现这类关联匹配的常用方案,若后续需要从level表获取更多字段(比如等级名称),JOIN会更方便。

  • 能否用子查询?
    完全可以,上面的方法2就是子查询的实现方式,每个用户行都会执行一次子查询,精准匹配对应等级。

  • 是否需要用BETWEEN进行判断?
    不需要。因为level表的EXP是递增的,只需要找到最大的、小于等于用户EXP的等级EXP即可。如果用BETWEEN,需要手动定义每个等级的区间(比如level 3对应250 <= exp < 500),后续新增等级时还需修改查询,灵活性较差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:04