MySQL 排序窗口函数
时间: 2023-06-19 19:07:00 浏览: 102
mysql排序查询
MySQL 支持窗口函数,可以用来进行排序操作。常用的窗口函数有 ROW_NUMBER、RANK、DENSE_RANK 和 NTILE。
1. ROW_NUMBER
ROW_NUMBER 函数会给每一行赋予一个唯一的数字,用来表示它在结果集中的位置。语法如下:
```
ROW_NUMBER() OVER (ORDER BY column)
```
其中,column 表示排序的列名。例如,如果要按照 salary 列进行排序,可以使用以下语句:
```
SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees;
```
2. RANK
RANK 函数会给每一行赋予一个排名,相同的值会得到相同的排名。如果有两个值相同,那么它们的排名会相同,但是下一个排名会跳过相同数量的值。语法如下:
```
RANK() OVER (ORDER BY column)
```
例如,如果要按照 salary 列进行排序,可以使用以下语句:
```
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
```
3. DENSE_RANK
DENSE_RANK 函数会给每一行赋予一个排名,相同的值会得到相同的排名。如果有两个值相同,它们的排名也会相同,但是下一个排名不会跳过相同数量的值。语法如下:
```
DENSE_RANK() OVER (ORDER BY column)
```
例如,如果要按照 salary 列进行排序,可以使用以下语句:
```
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
```
4. NTILE
NTILE 函数会将结果集分成指定数量的桶,并给每个桶分配一个 ID。语法如下:
```
NTILE(n) OVER (ORDER BY column)
```
其中,n 表示桶的数量。例如,如果要将结果集分成 4 个桶,可以使用以下语句:
```
SELECT name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS bucket
FROM employees;
```
这样会将结果集分成 4 个桶,并给每个桶分配一个 ID。
阅读全文