MySQL之SQL技巧

🤖 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_idgroup_id
              from t_user,
                   (select @group_id := 0) tmp1)
select id, username, group_id
from tmp2
where username <> '分隔符';

实现效果

MySQL之SQL技巧

请问大家有什么更好的实现方式吗?可以分享在评论区。


原文始发于微信公众号(小新数据库):MySQL之SQL技巧

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207601.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!