在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