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

MySQL删除行后如何单条查询实现按用户重新连续排名

实现方案

MySQL 8.0+ 版本(支持窗口函数,推荐)

仅查询重排后的结果

核心逻辑按user_id分组,组内按原有rank升序排序后生成连续序号即可:

SELECT 
  film_id,
  user_id,
  ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY `rank` ASC) AS new_rank
FROM rankings
WHERE film_id != 2;

直接更新原表rank字段为新的连续值

如果需要直接修改原表数据,用关联更新的单条语句实现:

UPDATE rankings r
JOIN (
  SELECT 
    film_id,
    user_id,
    ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY `rank` ASC) AS new_rank
  FROM rankings
  WHERE film_id != 2
) t ON r.film_id = t.film_id AND r.user_id = t.user_id
SET r.`rank` = t.new_rank
WHERE r.film_id != 2;

MySQL 5.x 兼容版本(不支持窗口函数)

用用户变量实现分组排名计算:

SELECT 
  film_id,
  user_id,
  CASE 
    WHEN @prev_user = user_id THEN @row_num := @row_num + 1
    ELSE @row_num := 1 AND @prev_user := user_id
  END AS new_rank
FROM rankings, (SELECT @prev_user := NULL, @row_num := 0) init
WHERE film_id != 2
ORDER BY user_id, `rank` ASC;

注意:rank是MySQL保留关键字,语句中用反引号包裹避免语法报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:15:01