SELECT d, e, ROW_NUMBER() OVER (PARTITION BY a ORDER BY b DESC) AS row_num FROM employee;
这个查询语句使用了ROW_NUMBER() OVER
函数,根据"a"列的值进行分区(PARTITION BY),并按照"b"列的值进行降序排序(ORDER BY b DESC)。然后,该函数会为每个分区中的行计算行号,并将其存储在名为"row_num"的列中。最终结果集包括"d"、"e"和"row_num"三个列。
具体来说,该查询将返回一个包含所有员工信息及其所在部门中薪水排名的结果集。其中,每个部门都是一个分区,在每个分区内,员工按照薪水从高到低排名,并且每个员工都有一个行号表示他们在该部门中的排名。
例如,假设有以下员工表:
a | d | e | b |
---|---|---|---|
1 | Finance | John Smith | 50000 |
1 | Finance | Jane Doe | 45000 |
1 | Finance | Bob Johnson | 40000 |
2 | Marketing | Alice Brown | 55000 |
2 | Marketing | Tom Wilson | 52000 |
2 | Marketing | Sarah Lee | 48000 |
运行上述查询后,将得到以下结果:
d | e | row_num |
---|---|---|
Finance | John Smith | 1 |
Finance | Jane Doe | 2 |
Finance | Bob Johnson | 3 |
Marketing | Alice Brown | 1 |
Marketing | Tom Wilson | 2 |
Marketing | Sarah Lee | 3 |
在这个结果集中,每个员工都有一个行号表示他们在所在部门中的排名。例如,John Smith是Finance部门中排名第一的员工,因此他的行号为1;而Bob Johnson是Finance部门中排名第三的员工,因此他的行号为3。