mysql - 组上的行编号不正确
问题描述
并感谢您帮助我学习 mysql。
我正在尝试动态生成仅在组中有新记录时才会增加的行号(对于给定的列)。我的代码有点工作 - 它应该在它应该改变的时候改变,但值都是错误的。
我有一个表fruits
,只有一列 ( varchar
) 调用preference
。它按以下顺序有九 (9) 条记录:
Apples
Pears
Apples
Oranges
Bananas
Pears
Oranges
Apples
Bananas
它与Increment Row Number on Group中提出的相同挑战(the 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
解决方案
=
in与表达式的结果@row_num = CASE ...
进行比较,表达式返回true 和false。你应该在那里分配。@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
推荐阅读
- c# - 我可以在 CreateAssetMenu 中设置子文件夹的排序顺序吗?
- c++ - 读/写 UTF-8 输入
- reactjs - WebpackError:#95313 Gatsby 构建失败
- javascript - 如何在 Typescript 中键入对象键?
- r - 将一个值与多列匹配
- javascript - React 不会呈现它收到的最后一个钩子更新
- php - PHP:为函数调用指定一个变量名
- javascript - 根据前缀拆分字符串?
- java - 字符串数组 String [] 非 null 导致 ResultSet 中的 null 抛出 NullPointerException
- python - 使用代理连接 Python 库