我从昨天开始创建 mysql 查询时陷入困境。我有一辆 table 推车,如下所示:-
id material_code
1 ABC100
2 DEF200
3 ABC100
4 ABC100
5 DEF200
Material 代码为 16 位数字,为了更好地理解,我将其取小了。我想要输出如下所示:-
id material_code item_number
1 ABC100 1
2 DEF200 2
3 ABC100 1
4 ABC100 1
5 DEF200 2
如您所见,ABC100 是重复的,因此其 item_number 为 1,DEF200 为 2,依此类推。谁能帮助我如何实现这一目标?我在谷歌上搜索过,没有找到任何结果。
最佳答案
对于 MySQL 8 之前的版本,您可以使用变量来模拟 ROW_NUMBER()
功能。这里的子查询根据 material_code
是否与上一行相同来分配项目编号,并使用按 material_code
排序的数据。然后,我们从子查询中SELECT
所有内容,再次按id
排序。
SELECT id, material_code, item_number
FROM (SELECT id,
@i := (CASE WHEN @m = material_code THEN @i ELSE @i + 1 END) AS item_number,
@m := material_code AS material_code
FROM carts
JOIN (SELECT @m := '', @i := 0) v
ORDER BY material_code) c
ORDER BY id
输出:
id material_code item_number
1 ABC100 1
2 DEF200 2
3 ABC100 1
4 ABC100 1
5 DEF200 2
关于mysql - 如何为mysql中的每个组赋予相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527736/