Mysql 组上的行编号不正确
谢谢你帮我学习mysql 我试图动态生成行号,只有当组中有新记录时(对于给定列),行号才会增加。我的代码在某种程度上是有效的——它会在应该的时候改变,但是值都是错误的 我有一个名为Mysql 组上的行编号不正确,mysql,Mysql,谢谢你帮我学习mysql 我试图动态生成行号,只有当组中有新记录时(对于给定列),行号才会增加。我的代码在某种程度上是有效的——它会在应该的时候改变,但是值都是错误的 我有一个名为fruits的表,其中只有一列(varchar)名为preference。按此顺序有九(9)条记录: Apples Pears Apples Oranges Bananas Pears Oranges Apples Bananas 这与中提出的挑战(t-index)相同,但该解决方案(我认为)使用了一个新的mysql
fruits
的表,其中只有一列(varchar
)名为preference
。按此顺序有九(9)条记录:
Apples
Pears
Apples
Oranges
Bananas
Pears
Oranges
Apples
Bananas
这与中提出的挑战(t-index)相同,但该解决方案(我认为)使用了一个新的mysql
Window
函数,该函数仅在mysql
v8
中可用,我的web主机不支持该函数(因为CPanel
还不支持)
这是我的密码
SET @row_num=1,@currFruit='';
SELECT @row_num=CASE WHEN fruit.preference=@currFruit
THEN @row_num
ELSE @row_num:=@row_num+1 END AS 'RowNum',
preference, @currFruit:=fruit.preference
FROM fruit
ORDER BY fruit.preference;
结果显示,动态生成的行号在应该的时候会发生变化,但初始值是错误的,它不应该重置每个组,它们不会一直递增(苹果应该是1,2,3),(香蕉应该是1,2),(桔子1,2),(梨1,2)
这是不正确的输出
@RowNum preference @currFruit:=fruit.preference
0 Apples Apples
1 Apples Apples
1 Apples Apples
0 Bananas Bananas
1 Bananas Bananas
0 Oranges Oranges
1 Oranges Oranges
0 Pears Pears
1 Pears Pears
@row\u num=CASE…
中的=
正在将@row\u num
与CASE
表达式的结果进行比较,表达式返回1
表示真,返回0
表示假。您应该在那里使用:=
赋值
您还将承担案例
错误的后果。如果与@currFruit
相同,则应添加1,否则应将其设置回1
SELECT @row_num := CASE WHEN fruit.preference=@currFruit
THEN @row_num + 1
ELSE 1 END AS 'RowNum',
preference, @currFruit:=fruit.preference
FROM fruit
ORDER BY fruit.preference
在
@row_num=CASE…
中的=
正在将@row_num
与CASE
表达式的结果进行比较,该表达式返回1
为真,返回0
为假。您应该在那里使用:=
赋值
您还将承担案例
错误的后果。如果与@currFruit
相同,则应添加1,否则应将其设置回1
SELECT @row_num := CASE WHEN fruit.preference=@currFruit
THEN @row_num + 1
ELSE 1 END AS 'RowNum',
preference, @currFruit:=fruit.preference
FROM fruit
ORDER BY fruit.preference
谢谢Barmar,我明白你说的缺少赋值运算符的意思了。但是代码并没有给出预期的解决方案-RowNum应该保持与上次记录相同的结果。preference=@currFruit,所以我修改了您的代码(见下文),但出于某种原因,第一个RowNum是2(应该是1)。您的问题是数字应该递增:“苹果应该是1,2,3”对不起,巴尔马,我错了。您的代码几乎可以工作(在删除+1之后),并将其改为“ELSE@row_num+1”,但第一条记录的RowNum为“2”(应为“1”)。如果您希望第一条RowNum为1,则将其初始化为
@row_num:=0
。感谢Barmar,我明白您对缺少赋值运算符的意思。但是代码并没有给出预期的解决方案-RowNum应该保持与上次记录相同的结果。preference=@currFruit,所以我修改了您的代码(见下文),但出于某种原因,第一个RowNum是2(应该是1)。您的问题是数字应该递增:“苹果应该是1,2,3”对不起,巴尔马,我错了。您的代码几乎可以正常工作(在删除+1后)并将其改为“ELSE@row_num+1”,但第一条记录的RowNum为“2”(应为“1”)。如果希望第一条RowNum为1,则将其初始化为@row_num:=0
。