我有一个简单的表,我需要识别四行组(这些组不是连续的),但每行的每一行的值都是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