gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:28:15 24 4
gpt4 key购买 nike

我在 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

此处第三列显示我要添加新列的行基础的状态。所需的逻辑是,对于“状态”列中的每组重复值 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

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

最佳答案

您可以使用 User-defined Session variables 在 MySQL 中实现此目的,并使用条件函数,如 If() .我们将前一行的状态值存储在 @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

关于MySQL 添加具有数字类别的列,根据另一个列值和位置进行增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52795212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com