表: 薪水表
+------+-----+ | 字段名称 | 类型 | +------+-----+ | 雇员编号 | int | | 部门编号 | int | | 薪水 | int | +------+-----+ 雇员编号 是该表的主键。 该表的每一行表示 一个部门中一名雇员的薪水信息,包含雇员编号、部门编号和薪水。
编写一个 SQL 查询,保持行数不变,得出每个部门的平均薪水,平均薪水保留2位小数。
查询结果如下例所示。
示例 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 | 69168.80 | | 10004 | 1 | 66596 | 69168.80 | | 10005 | 1 | 66961 | 69168.80 | | 10008 | 1 | 75286 | 69168.80 | | 10010 | 1 | 76884 | 69168.80 | | 10002 | 2 | 92102 | 87909.80 | | 10003 | 2 | 86074 | 87909.80 | | 10006 | 2 | 81046 | 87909.80 | | 10007 | 2 | 94333 | 87909.80 | | 10009 | 2 | 85994 | 87909.80 | +-------+------+-------+-----------+ 解释: 因为求每个部门的平均薪水时必须保持行数不变,因此需要使用窗口函数进行求值,语法为:avg(薪水) over(partition by 部门编号),使用round()函数保留2位小数。
