CDA持证人阿涛哥

2023-10-21   阅读量: 279

SQL排序

mysql 中开窗函数 排名的几种方式

扫码加入数据分析学习群

1.使用ORDER BY子句:可以在开窗函数中使用ORDER BY子句对结果进行排序排名从1开始递增。

2.使用RANK()函数:RANK()函数会为相同值的数据生成相同的排名,并跳过下一个排名。

3.使用DENSE_RANK()函数:DENSE_RANK()函数会为相同值的数据生成相同的排名,并不跳过下一个排名。

在具体示例中,假设我们有以下数据表employees:

+----+------+--------+

| id | name | salary |

+----+------+--------+

| 1 | John | 3000 |

| 2 | Jane | 4000 |

| 3 | Mary | 3500 |

| 4 | Mark | 4000 |

+----+------+--------+

1. 使用ROW_NUMBER()函数的排名示例:

SELECT id, name, salary, ROW_NUMBER() OVER (ORDER BY salary) AS rank

FROM employees;

结果:

+----+------+--------+------+

| id | name | salary | rank |

+----+------+--------+------+

| 1 | John | 3000 | 1 |

| 3 | Mary | 3500 | 2 |

| 2 | Jane | 4000 | 3 |

| 4 | Mark | 4000 | 4 |

+----+------+--------+------+

2. 使用RANK()函数的排名示例:

SELECT id, name, salary, RANK() OVER (ORDER BY salary) AS rank

FROM employees;

结果:

+----+------+--------+------+

| id | name | salary | rank |

+----+------+--------+------+

| 1 | John | 3000 | 1 |

| 3 | Mary | 3500 | 2 |

| 2 | Jane | 4000 | 3 |

| 4 | Mark | 4000 | 3 |

+----+------+--------+------+

3. 使用DENSE_RANK()函数的排名示例:

SELECT id, name, salary, DENSE_RANK() OVER (ORDER BY salary) AS rank

FROM employees;

结果:

+----+------+--------+------+

| id | name | salary | rank |

+----+------+--------+------+

| 1 | John | 3000 | 1 |

| 3 | Mary | 3500 | 2 |

| 2 | Jane | 4000 | 3 |

| 4 | Mark | 4000 | 3 |

+----+------+--------+------+

根据以上示例,可以看出:

- ROW_NUMBER()函数会为每一行数据生成一个唯一的排名。

- RANK()函数会为相同值的数据生成相同的排名,并跳过下一个排名。

- DENSE_RANK()函数会为相同值的数据生成相同的排名,并不跳过下一个排名。

添加CDA数据分析金老师,微信号:CDALS06,提供数据分析及CDA考试指导交流!
0.0000 0 0 关注作者 收藏

评论(0)


暂无数据

推荐课程