mysql 分段id,在MySQL中连续分组值并为这些组添加ID

我有一个简单的表,我需要识别四行组(这些组不是连续的),但每行的每一行的值都是1.例如:

----------------------

| language | id |

----------------------

| C | 16 |

| C++ | 17 |

| Java | 18 |

| Python | 19 |

| HTML | 65 |

| JavaScript | 66 |

| PHP | 67 |

| Perl | 68 |

----------------------

我想添加一个指示组或集的列,如何使用MySQL获取此输出?:

----------------------------

| language | id | set |

----------------------------

| C | 16 | 1 |

| C++ | 17 | 1 |

| Java | 18 | 1 |

| Python | 19 | 1 |

| HTML | 65 | 2 |

| JavaScript | 66 | 2 |

| PHP | 67 | 2 |

| Perl | 68 | 2 |

----------------------------

请注意,在此示例中只有2个集合(可能是1个或更多集合)并且它们不是从16开始(这些值不是已知的,但限制是每行的每个id值都具有此形式n,n 1,n 2和n 3).

我一直在研究Gaps& amp;群岛问题,但没有想到如何通过使用他们的解决方案来解决它.我也在stackoverflow上搜索,但我找到的最接近的问题是How to find gaps in sequential numbering in mysql?

谢谢

解决方法:

select language,

@n:=if(@m+1=id, @n, @n+1) `set`,

(@m:=id) id

from t1,

(select @n:=0) n,

(select @m:=0) m

标签:mysql,database,sql,gaps-and-islands

来源: https://codeday.me/bug/20190628/1315749.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值