【问题标题】:MySQL with counters带计数器的 MySQL
【发布时间】:2021-01-19 00:10:27
【问题描述】:

我的查询:

SELECT name FROM users

可以为每个不同的名称添加一个计数器。例如:

mark  1
john  1
mark  2
louis 1
john  2
Ann   1

谢谢

【问题讨论】:

  • counter 的值是什么?表现如何?

标签: mysql sql select count window-functions


【解决方案1】:

如果你运行的是 MySQL 8.0,你可以使用 row_number() 来做这个:

SELECT name, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) rn FROM users

这假设您有另一列,称为 id,可用于对记录进行排序(通常是表的主键)。

如果您没有这样的列,您可以删除窗口函数的 ORDER BY 子句 - 但是查询的结果是不稳定的,这意味着不能保证给定的row 将在同一查询的连续执行中始终获得相同的行号。根据您的用例,这可能是您想要的,也可能不是您想要的。

在早期版本的 MySQL 中,您可以使用相关子查询来模拟 row_number()

select name, 
    1 + (select count(*) from users u1 where u1.name = u.name and u1.id < u.id) rn
from users u

【讨论】:

  • 完美!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
相关资源
最近更新 更多