如何使用mysql获取连续数字?
我想检索连续的数字及其计数,例如在我的数据库中,我有类似的输入如何使用mysql获取连续数字?,mysql,Mysql,我想检索连续的数字及其计数,例如在我的数据库中,我有类似的输入 1,2,3,4,5,9,10,12,14,15,16,51,81 我预期的产出 Numbers counts 1-5 5 9-10 2 12-16 4 51 1 81 1 如果有人知道,请分享解决方案。免责声明:这是为了好玩。使用您选择的实际编程语言可能更容易 这并不
1,2,3,4,5,9,10,12,14,15,16,51,81
我预期的产出
Numbers counts
1-5 5
9-10 2
12-16 4
51 1
81 1
如果有人知道,请分享解决方案。免责声明:这是为了好玩。使用您选择的实际编程语言可能更容易
这并不像看上去那么简单,你必须使用它
样本数据:
CREATE TABLE t
(`id` int)
;
INSERT INTO t
(`id`)
VALUES
(1),
(2),
(3),
(4),
(5),
(9),
(10),
(12),
(14),
(15),
(16),
(51),
(81)
;
查询:
SELECT CONCAT_WS('-', MIN(id), IF(MAX(id) = MIN(ID), NULL, MAX(id))), COUNT(*)
FROM (
SELECT
id
, @group_number := IF(@prev != id - 1, @group_number + 1, @group_number) AS gn
, @prev := id
FROM
t,
(SELECT @group_number := 0, @prev := NULL) var_init_subquery
ORDER BY id
) sq
GROUP BY gn
结果:
| CONCAT_WS('-', MIN(id), IF(MAX(id) = MIN(ID), NULL, MAX(id))) | COUNT(*) |
|---------------------------------------------------------------|----------|
| 1-5 | 5 |
| 9-10 | 2 |
| 12 | 1 |
| 14-16 | 3 |
| 51 | 1 |
| 81 | 1 |
- 现场观看它的工作 免责声明:这是为了好玩。使用您选择的实际编程语言可能更容易 这并不像看上去那么简单,你必须使用它 样本数据:
CREATE TABLE t
(`id` int)
;
INSERT INTO t
(`id`)
VALUES
(1),
(2),
(3),
(4),
(5),
(9),
(10),
(12),
(14),
(15),
(16),
(51),
(81)
;
查询:
SELECT CONCAT_WS('-', MIN(id), IF(MAX(id) = MIN(ID), NULL, MAX(id))), COUNT(*)
FROM (
SELECT
id
, @group_number := IF(@prev != id - 1, @group_number + 1, @group_number) AS gn
, @prev := id
FROM
t,
(SELECT @group_number := 0, @prev := NULL) var_init_subquery
ORDER BY id
) sq
GROUP BY gn
结果:
| CONCAT_WS('-', MIN(id), IF(MAX(id) = MIN(ID), NULL, MAX(id))) | COUNT(*) |
|---------------------------------------------------------------|----------|
| 1-5 | 5 |
| 9-10 | 2 |
| 12 | 1 |
| 14-16 | 3 |
| 51 | 1 |
| 81 | 1 |
- 现场观看它的工作
虽然在阅读了免责声明之后,我可能会这么做。现在只需要一个快速选项我的表中有一列类似studentId,该列中的值不是完全连续的,有些断点在那里(断点表示缺少一些值,例如1,2,3,4,5,8,9,10,15,23)。所以我想计算表中有多少个连续数据,没有起始点和结束点FWIW,这让我觉得在SQL查询中很难做到,但在后端代码中,比如说PHP,这很容易做到。@CatoMinor有趣的是,我认为,这是另一种方式…在SQL中很容易做到,在PHP中做起来很乏味…@Martin I did:-我的表中有一列类似studentId,在该列中,值不是完全连续的,有些断点在那里(断点表示缺少一些值,例如1,2,3,4,5,8,9,10,15,23)。所以我想计算表中有多少个连续数据,没有起始点和结束点FWIW,这让我觉得在SQL查询中很难做到,但在后端代码中,比如说PHP,这很容易做到。@CatoMinor有趣的是,我认为,这是另一种方式…在SQL中很容易做到,用PHP做起来很无聊…@Martin I做了:-DHi,这很好,但是有没有办法让它与众不同?嗨,这很好,但是有没有办法让它与众不同?