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
注意事项
- ROW_NUMBER()函数只能在SELECT语句中使用。
- ORDER BY子句中的列必须是结果集中的列之一。
- PARTITION BY子句中的列必须是结果集中的列之一。
- 如果没有指定排序规则,则默认按照升序排列。