MySQL添加带有数字类别的列,根据另一个列值和位置进行增量



我在MySQL中有一个表,如下所述

rownum,value,status
1,16,1
2,32,1
3,16,1
4,23,0
5,33,0
6,16,0
7,22,0
8,13,1
9,43,1
10,32,1
11,45,0
12,28,0
13,23,0
14,28,0
15,31,1
16,13,1
17,44,1

这里第三列显示了我要添加一个新列的行基础的状态。所需的逻辑是,对于"status"列中每组重复值 1,新列将获得分配给所有这些行的数字。当找到下一组 1 时,这个数字将以 +1 递增。输出表应如下所示。

rownum,value,status,category
1,16,1,1
2,32,1,1
3,16,1,1
4,23,0,null
5,33,0,null
6,16,0,null
7,22,0,null
8,13,1,2
9,43,1,2
10,32,1,2
11,45,0,null
12,28,0,null
13,23,0,null
14,28,0,null
15,31,1,3
16,13,1,3
17,44,1,3

我对如何创建此逻辑有点困惑,任何输入都将非常有帮助。谢谢!

您可以使用用户定义的会话变量以及If()等条件函数在MySQL中实现此目的。我们将上一行的状态值存储在变量@stat,并将其与当前行的状态值进行比较,以获得预期的结果。

但是,如果它只是出于显示目的,您应该认真考虑在应用程序代码中处理它。

不过,请尝试以下查询(DB Fiddle DEMO(:

SELECT 
IF( dt.status = 0, 
NULL, 
IF( @stat = 0, @cat := @cat + 1, @cat )
) AS category, 
dt.rownum, 
dt.value, 
@stat := dt.status AS status 
FROM 
(
SELECT 
rownum, 
value, 
status 
FROM your_table
ORDER BY rownum ASC 
) AS dt 
CROSS JOIN (SELECT @cat := 0, 
@stat := 0) AS init_user_vars

相关内容

  • 没有找到相关文章

最新更新