如何从mysql对结果集进行编号(另一个不使用用户变量的选项)

11dmarpk  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(410)

例如,创建一个查询来关联所有用户及其帖子

SELECT users.nameUser, posts.namePost
FROM users
JOIN posts ON users.id = posts.user_id;

它工作得很好,但我需要对结果进行编号;所以我用这种方式声明了一个用户变量

SET @counter = 0;

现在我用它

SELECT (@counter := @counter + 1) AS NP, users.nameUser, posts.namePost
FROM users
JOIN posts ON users.id = posts.user_id;

但是现在有了mysql 8和window函数,我需要使用另一种方法来避免用户变量
我怎样才能做到这一点?
记得。。。
如果需要变量增加其值,则必须使用 := 否则,无论结果集的大小,它都保持相同的值

cuxqih21

cuxqih211#

由于mysql 8支持窗口函数,您可以使用: row_number() 行号()的作用是什么?
它从1开始计数,然后以1加1递增
row_number()需要与over子句一起使用,才能对特定列(在本例中为nameuser)进行asc o desc排序
我的代码应该是这样的

SELECT row_number() OVER(ORDER BY users.nameUser) AS NP, users.nameUser, posts.namePost
FROM users
JOIN posts ON users.id = posts.user_id;

相关问题