【发布时间】: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
我的查询:
SELECT name FROM users
可以为每个不同的名称添加一个计数器。例如:
mark 1
john 1
mark 2
louis 1
john 2
Ann 1
谢谢
【问题讨论】:
counter 的值是什么?表现如何?
标签: mysql sql select count window-functions
如果你运行的是 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
【讨论】: