表: 薪水表
+------+-----+ | 字段名称 | 类型 | +------+-----+ | 雇员编号 | int | | 部门编号 | int | | 薪水 | int | +------+-----+ 雇员编号 是该表的主键。 该表的每一行表示 一个部门中一名雇员的薪水信息,包含雇员编号、部门编号和薪水。
编写一个 SQL 查询,得出每个部门雇员的薪水升序降序排名。
查询结果如下例所示。
示例 1:
输入: 表:薪水表 +-------+------+-------+ | 雇员编号 | 部门编号 | 薪水 | +-------+------+-------+ | 10001 | 1 | 60117 | | 10002 | 2 | 92102 | | 10003 | 2 | 86074 | | 10004 | 1 | 66596 | | 10005 | 1 | 66961 | | 10006 | 2 | 81046 | | 10007 | 2 | 94333 | | 10008 | 1 | 75286 | | 10009 | 2 | 85994 | | 10010 | 1 | 76884 | +-------+------+-------+ 输出: +-------+------+-------+--------+--------+ | 雇员编号 | 部门编号 | 薪水 | 薪水升序排名 | 薪水降序排名 | +-------+------+-------+--------+--------+ | 10001 | 1 | 60117 | 1 | 5 | | 10004 | 1 | 66596 | 2 | 4 | | 10005 | 1 | 66961 | 3 | 3 | | 10008 | 1 | 75286 | 4 | 2 | | 10010 | 1 | 76884 | 5 | 1 | | 10006 | 2 | 81046 | 1 | 5 | | 10009 | 2 | 85994 | 2 | 4 | | 10003 | 2 | 86074 | 3 | 3 | | 10002 | 2 | 92102 | 4 | 2 | | 10007 | 2 | 94333 | 5 | 1 | +-------+------+-------+--------+--------+ 解释: 使用排序窗口函数,按部门编号分组(partition by 部门编号),按薪水进行升序(order by 薪水 asc)和降序(order by 薪水 desc)排序即可得出对应排名。
