sql查询增加自动递增的序号列

可以用row_number函数实现

 SELECT *,row_number() OVER(ORDER BY score(列名) DESC) AS rank FROM score 

语法:

ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

举例:根据部门分组,显示每个部门的工资等级

预期结果:

empid deptid salary rank
1 10 5500 1
2 10 4500 2
4 20 4800 1
3 20 1900 2
7 40 44500 1
6 40 14500 2
5 40 6500 3
9 50 7500 1
8 50 6500 2

SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

详解ROW_NUMBER()函数

简介

ROW_NUMBER()函数是一种用于生成序号的窗口函数,它可以为结果集中的每一行生成一个唯一的序号。这个序号通常用于标识每一行的位置或顺序,方便后续的数据处理和分析。

ROW_NUMBER()函数的作用类似于Excel中的行号,它可以帮助我们更好地理解结果集中的数据,并进行更加精细化的数据处理和分析。使用ROW_NUMBER()函数可以方便地对结果集进行排序、分组和筛选,同时还可以避免数据重复和漏选的情况。

基本语法

ROW_NUMBER() OVER ([PARTITION BY partition_expression, ... ] ORDER BY sort_expression1 [ASC|DESC], sort_expression2, ... [ASC|DESC])

其中,PARTITION BY子句用于指定分组规则,ORDER BY子句用于指定排序规则。

按照单个列生成序号

例如,以下查询将返回一个包含每个客户的序号和姓名的结果集,按照姓名的字母顺序排序:

SELECT ROW_NUMBER() OVER (ORDER BY name) AS '序号', name
FROM customers

按照多个列生成序号

例如,以下查询将返回一个包含每个客户的序号、姓名和城市的结果集,按照城市和姓名的字母顺序排序: 

SELECT ROW_NUMBER() OVER (ORDER BY city, name) AS '序号', name, city
FROM customers

按照分组列生成序号

例如,以下查询将返回一个包含每个客户的序号、姓名和城市的结果集,按照城市的字母顺序分组,并在每个分组中按照姓名的字母顺序排序:

SELECT ROW_NUMBER() OVER (PARTITION BY city ORDER BY name) AS '序号', name, city
FROM customers

注意事项

  1. ROW_NUMBER()函数只能在SELECT语句中使用。
  2. ORDER BY子句中的列必须是结果集中的列之一。
  3. PARTITION BY子句中的列必须是结果集中的列之一。
  4. 如果没有指定排序规则,则默认按照升序排列。
THE END
分享
二维码
打赏
海报
sql查询增加自动递增的序号列
可以用row_number函数实现 SELECT *,row_number() OVER(ORDER BY score(列名) DESC) AS rank FROM score 语法: ROW_NUMBER() OVE……
<<上一篇
下一篇>>
文章目录
关闭
目 录