一个sql 数差分组问题

发布于 2022-09-12 03:53:56 字数 298 浏览 10 评论 0

如题 只能用sql的方式

有下面一堆数
0
1
1
2
3
8
9
10
12
15
18

按数差为3分组

结果是
0
1
1
2
3

8
9
10

12
15

18

这样分成四组

其中第二组从8开始分 相当于第二组的最开始一个数,以此类推来分组

用sql的形式 有好的解题思路吗
最好能直接给sql代码或者伪代码
求大神解答

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

变身佩奇 2022-09-19 03:53:56

测试数据:

CREATE TABLE `tb_id` (
  `id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

root test>select * from tb_id;
+----+
| id |
+----+
|  0 |
|  1 |
|  1 |
|  2 |
|  3 |
|  8 |
|  9 |
| 10 |
| 12 |
| 15 |
| 18 |
+----+

结论:

root test>SELECT @id:=(if(id-@id>3,id,@id)) as group_no, id FROM `tb_id`,(select @id:=-10)t;
+----------+----+
| group_no | id |
+----------+----+
| 0        |  0 |
| 0        |  1 |
| 0        |  1 |
| 0        |  2 |
| 0        |  3 |
| 8        |  8 |
| 8        |  9 |
| 8        | 10 |
| 12       | 12 |
| 12       | 15 |
| 18       | 18 |
+----------+----+

说明:tb_id表的id要递增,没有的话要先排序;(select @id:=-10)t里面的-10可随意定义,只要比tb_id中的min(id)小于3即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文