对连续出现的某一个值计数
数据中有num列,这一列只有1和2,希望加一列,对连续出现的2进行计数。
数据和结果如下:
下面是Mysql的代码:
-- 创建一个测试表
CREATE TABLE test_table (
id INT PRIMARY KEY,
num INT
);
-- 插入测试数据
INSERT INTO test_table (id, num) VALUES (1, 1);
INSERT INTO test_table (id, num) VALUES (2, 2);
INSERT INTO test_table (id, num) VALUES (3, 2);
INSERT INTO test_table (id, num) VALUES (4, 1);
INSERT INTO test_table (id, num) VALUES (5, 2);
INSERT INTO test_table (id, num) VALUES (6, 2);
INSERT INTO test_table (id, num) VALUES (7, 2);
INSERT INTO test_table (id, num) VALUES (8, 1);
SET @count := 0;
SELECT num,
CASE WHEN num = 2 THEN @count:=@count+1 ELSE @count:=0 END AS count
FROM test_table;
1个回复
-
xsmile
如果要统计每次2连续出现了多少次,可以使用开窗函数
SELECT COUNT(*) AS num_occurrences
FROM (
SELECT num, ROW_NUMBER() OVER (ORDER BY id) - ROW_NUMBER() OVER (PARTITION BY num ORDER BY id) AS grp
FROM test
) t1
WHERE num = 2
GROUP BY grp;首先,内部查询子句(t1)使用 ROW_NUMBER() 函数为表中的记录进行排序,并在 num 列上使用 PARTITION BY 子句进行分组。 然后,我们计算每个记录的行号减去相同 num 值的行号,从而创建一个 "grp" 列,用于标识连续出现的片段。 接下来,在外部查询中,我们筛选出 num 值为 2,并且连续出现的次数达到 2 次及以上的连续片段。 最后,使用 COUNT(*) 统计每次连续出现的次数,并按照连续片段进行分组。
9个月前 我来评论