问答

一个sql 数差分组问题

作者:admin 2021-06-15 我要评论

如题 只能用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开始分 相当于第二...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

如题 只能用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代码或者伪代码
求大神解答

###

测试数据:

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即可。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 一个sql 数差分组问题

    一个sql 数差分组问题

  • 在sublime中设置动态代码块的时候,如

    在sublime中设置动态代码块的时候,如

  • php对象缓存的应用场景有哪些?

    php对象缓存的应用场景有哪些?

  • go-rod 处理 a标签请求

    go-rod 处理 a标签请求

腾讯云代理商
海外云服务器