mysql - 如何为mysql中的每个组赋予相同的值

标签 mysql sql

我从昨天开始创建 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

Demo on dbfiddle

关于mysql - 如何为mysql中的每个组赋予相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527736/

相关文章:

mysql - 在新 Controller 方法中使用 form_for 时未定义方法

php - 当数组为空时进行 while 循环?

mysql - 使用 PhpMyAdmin 将多个 CSV 文件合并到一个数据库中

sql - 像处理任何其他表一样处理 sys 表

SQL ROW_NUMBER() 性能问题

sql - 如何在没有管理员的情况下获取 SQL Server 实例上的数据库列表?

sql - 将 sqlite 转换为 postgres 查询

错误1136

MySQL 触发器在表 A、INSERT 或 UPDATE 表 B 上使用 TIMESTAMPDIFF()

sql - 选择客户的总订单和最后订单