🤖 Introduce the question
记得两年前有一个大学生向我问了一道 MySQL
问题,问题如下:
有一个用户表
,其中username
字段每隔n
行会出现字段值为间隔值
,如下所示,
id | username |
---|---|
1 | Mary |
2 | John |
3 | Tom |
4 | Jerry |
5 | 分隔符 |
6 | Rose |
7 | Lucy |
8 | 分隔符 |
9 | Bob |
10 | Mike |
11 | 分隔符 |
12 | Lily |
13 | Linda |
14 | 分隔符 |
15 | Jack |
16 | Tony |
… | … |
❓ 要求
用一个
SQL实现下面的要求
-
每遇到 分隔符
,之前的数据划分为一组,生成group_id
,即(1,Mary),(2,John),(3,Tom),(4,Jerry)
的group_id
为0,(6,Rose),(7,Lucy)
为1,依次往下。 -
不能使用存储过程或者变量,只用一个SQL查询实现。
id | username | group_id |
---|---|---|
1 | Mary | 0 |
2 | John | 0 |
3 | Tom | 0 |
4 | Jerry | 0 |
6 | Rose | 1 |
7 | Lucy | 1 |
9 | Bob | 2 |
10 | Mike | 2 |
12 | Lily | 3 |
13 | Linda | 3 |
15 | Jack | 4 |
16 | Tony | 4 |
18 | Lily | 5 |
19 | Linda | 5 |
❇️ My solution
我记得当时是这样写的
with tmp2 as (select id,
username,
@group_id := if(username = '分隔符', @group_id + 1, @group_id) group_id
from t_user,
(select @group_id := 0) tmp1)
select id, username, group_id
from tmp2
where username <> '分隔符';
实现效果

请问大家有什么更好的实现方式吗?可以分享在评论区。
原文始发于微信公众号(小新数据库):MySQL之SQL技巧
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207601.html