翼度科技»论坛 编程开发 mysql 查看内容

mysql数据库row_number函数举例介绍

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
1.语法

#将字段按照COLUMN1分组COLUMN2排序后分配一个从1开始升序的编号
  1. SELECT *, ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2 ) AS NUM FROM TABLE;
复制代码

  • PARTITION BY子句将结果集划分为分区。 ROW_NUMBER()函数分别应用于每个分区,并重新初始化每个分区的行号。
  • PARTITION BY子句是可选的。如果未指定,ROW_NUMBER()函数会将整个结果集视为单个分区。
  • ORDER BY子句定义结果集的每个分区中的行的逻辑顺序。ORDER BY子句是必须的,因为ROW_NUMBER()函数对顺序敏感

2.举例

1.将商品表中的价格按升序排序并编号
  1. SELECT goods_price,goods_user_id,ROW_NUMBER() over(ORDER BY goods_price) as num  FROM  goods
复制代码
运行结果:

结果新增了一列来标记行号
2.将商品按用户分组后价格降序并编号
  1. SELECT goods_price,goods_user_id,ROW_NUMBER() over(PARTITION BY goods_user_id ORDER BY goods_price desc) as num FROM goods
复制代码
运行结果:

结果会按每一个用户进行分区,按价格降序排序后,按顺序编号。
3.将商品按用户分组后价格降序并编号且只查询编号为1的记录
  1. SELECT * FROM
  2. (SELECT goods_price,goods_user_id,ROW_NUMBER() over(PARTITION By goods_user_id ORDER BY goods_price desc) as num FROM  goods) as a  
  3. WHERE a.num=1
复制代码
运行结果:

可以看到在上述基础上过滤出了编号为1的记录。

3.更复杂的示例:

下面是一个稍微复杂一些的示例,我们可以使用ROW_NUMBER()函数为每个部门的员工按工资进行排名。我们需要将
  1. salary
复制代码
结果分组到每个
  1. department_id
复制代码
中,然后根据
  1. salary
复制代码
降序排序。以下是我们的示例代码:
  1. SELECT row_no, department_id, first_name, last_name, salary
  2. FROM (
  3.    SELECT department_id, first_name, last_name, salary,
  4. ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) as row_no
  5. FROM employee) t
  6. WHERE row_no <= 5;
复制代码
该查询使用了子查询,首先它将需要的列投射到
  1. ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC)
复制代码
中,其中
  1. PARTITION BY department_id
复制代码
的作用是将结果按部门分组,而
  1. ORDER BY salary DESC
复制代码
则按工资降序排列。最后,我们只取每个部门及其前5名员工。
我们可以看到,ROW_NUMBER()函数对于数据分析非常有用,可以帮助我们完成许多复杂的任务。

总结

到此这篇关于mysql数据库row_number函数的文章就介绍到这了,更多相关mysql row_number函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/database/315886e83.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具