表结构:t_user
英文名 | 中文字段名 |
---|
id | 主键id |
name | 姓名 |
groupCode | 小组编号 |
sort | 组内序号 |
数据
id | name | groupCode | sort |
---|
1 | 张三1 | 1 | 1 |
2 | 张三2 | 1 | 2 |
3 | 张三3 | 1 | 3 |
4 | 张三4 | 2 | |
5 | 张三5 | 2 | |
6 | 张三6 | 2 | |
7 | 张三7 | 3 | |
8 | 张三8 | 3 | |
9 | 张三9 | 3 | |
10 | 张三10 | 3 | |
11 | 张三11 | 3 | |
需求
现需给表中的sort字段设置根据小组编号分组自增的数据。小组编号不同,则编号重新从1开始。
语句
update t_user r set sort = ( select i from (
SELECT
(
@i := CASE
WHEN @GroupCode = t1.groupCode THEN
@i + 1
ELSE
1
END
) AS i,
(@GroupCode := t1.groupCode),
t1.groupCode,t1.id
FROM
t_user t1
ORDER BY
t1.name asc
) a where r.groupCode = a.groupCodeand r.id = a.id)
where r.groupCode is null
执行结果
id | name | groupCode | sort |
---|
1 | 张三1 | 1 | 1 |
2 | 张三2 | 1 | 2 |
3 | 张三3 | 1 | 3 |
4 | 张三4 | 2 | 1 |
5 | 张三5 | 2 | 2 |
6 | 张三6 | 2 | 3 |
7 | 张三7 | 3 | 1 |
8 | 张三8 | 3 | 2 |
9 | 张三9 | 3 | 3 |
10 | 张三10 | 3 | 4 |
11 | 张三11 | 3 | 5 |