感谢您帮助我学习mysql。
我正在尝试动态生成仅在组中(对于给定列)有新记录时才递增的行号。我的代码可以正常工作-它在应有的时候改变,但是值都是错误的。
我有一个fruits
只有一个varchar
称为()的表preference
。它按此顺序有九(9)个记录:
Apples
Pears
Apples
Oranges
Bananas
Pears
Oranges
Apples
Bananas
这与组上递增行号t-index
所面临的挑战相同,但是该解决方案使用了(我认为)mysql
Window
仅在中可用的新功能(我认为)mysql
v8
,但我的网络托管服务商不支持(因为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_num = CASE ...
被比较@row_num
的结果CASE
表达,它返回1
为真和0
假。您应该在:=
那里分配。
您也会有CASE
错误后果。与@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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句