mysql ROW_NUMBER()
时间: 2023-12-07 18:02:57 浏览: 163
ROW_NUMBER()是MySQL中的一个窗口函数,用于为结果集中的每一行分配一个唯一的数字。它可以根据指定的排序规则对结果集进行排序,并为每一行分配一个连续的整数值。在引用中给出的示例中,ROW_NUMBER()函数用于给结果集中的每一行分配一个编号。这个编号是根据str和id两个列来确定的。具体的实现如下所示:
```
SELECT
@num := IF(@str = str, @num + 1, 1) AS num,
id,
@str := str AS str,
remark
FROM
tem t, (SELECT @str := '', @num := 0) t1
ORDER BY
str, id
```
这个查询语句中使用了MySQL的用户变量(@num和@str)来记录当前的编号和上一行的str值。如果当前行的str值和上一行相同,则编号自增1;否则,编号重新从1开始计数。最终,查询结果按照str和id进行排序,并返回每一行的编号、id、str和remark值。引用提供了另一种实现方式,使用了RANK()函数来分配编号,具体的实现如下所示:
```
SELECT
str,
@num := IF(@str = str, @num, @rk) AS rn,
@rk := @rk + 1,
@str := str
FROM
tem t1, (SELECT @str := '', @num := 0, @rk := 1) t2
ORDER BY
str
```
这个查询语句中也使用了用户变量(@num、@rk和@str)来记录当前的编号、排名和上一行的str值。如果当前行的str值和上一行相同,则保持编号不变;否则,排名自增1。最终,查询结果按照str进行排序,并返回每一行的str和排名值。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* *2* [Mysql row_number() | rank() 实现](https://blog.csdn.net/hello_heheha/article/details/125535524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文