当前位置: 首页 > 知识库问答 >
问题:

查找同一部门id的前一行和当前行的平均值

秦飞航
2023-03-14

我有3名员工与相同的部门。我想找到他们的平均工资的基础上,前面的行。

举个例子

Employee_id  department_id salary   avg(salary)
101             1           5000      5000
102             1           10000     7500
103             1           15000     10000 

这就像对于第一个薪水的部门id为1,我们发现员工id为101的平均值为5000,对于相同的部门id为1,对于员工ID为102,我们找到了按部门id分组的2个值的平均值。因此平均值为 (10000 5000) /2 = 7500

但对于员工id为103的情况,部门id为1,并与上述三个金额值一起分组。因此,平均工资为(10000 5000 15000)/3=10000

要求是我被要求使用query_partition_clause和order_by_clause。

因此,我尝试如下,

 select  avg(salary) OVER (partition by department_id ORDER BY department_id ) salary, department_id, salary from employee

但我总是通过考虑3个数据值的部门来获得值。

从今以后,有人能帮助解决这个问题吗?

非常感谢您的帮助。

共有2个答案

贺玉石
2023-03-14
SELECT EMPLOYEE_ID, 
       DEPARTMENT_ID, 
       SALARY, 
       (SELECT AVG(SALARY) 
          FROM EMPLOYEES B 
         WHERE B.EMPLOYEE_ID <= A.EMPLOYEE_ID) AVG_SALARY
  FROM EMPLOYEES A
 GROUP BY EMPLOYEE_ID, 
          DEPARTMENT_ID, 
          SALARY

子查询可以通过过滤员工ID在查询本身中完成。我希望我在这方面有所帮助。

水铭晨
2023-03-14

使用< code>ORDER BY salary(或< code>ORDER BY employee_id)而不是< code > ORDER BY department _ id :

Oracle设置:

CREATE TABLE employees ( Employee_id, department_id, salary ) AS
SELECT 101, 1,  5000 FROM DUAL UNION ALL
SELECT 102, 1, 10000 FROM DUAL UNION ALL
SELECT 103, 1, 15000 FROM DUAL;

查询:

SELECT e.*,
       AVG( salary ) OVER ( PARTITION BY department_id ORDER BY salary ) AS avg_salary
FROM   employees e

输出:

EMPLOYEE_ID | DEPARTMENT_ID | SALARY | AVG_SALARY
----------: | ------------: | -----: | ---------:
        101 |             1 |   5000 |       5000
        102 |             1 |  10000 |       7500
        103 |             1 |  15000 |      10000

分贝

 类似资料:
  • 问题内容: 我想知道是否可以在一个SQL SERVER请求中获得总和的平均值, 尝试使用以下请求来执行此操作,但是它不起作用: 问题答案: 我认为您的问题需要一些解释。如果要取分组的总和,可以使用: 然后,如果要取该总和的平均值,则只需进行以下操作: 但是,您无法对外部查询进行分组,因为这将为您提供类似于第一个查询的结果。内部查询的结果已按分组。

  • 问题内容: 说我有身份证。我将如何获得下一行或上一行? 问题答案: 这就是我用来查找上一个/下一个记录的方法。表格中的任何列都可以用作排序列,并且不需要联接或讨厌的技巧: 下一条记录(日期大于当前记录): 上一个记录(日期小于当前记录): 例:

  • 问题内容: 如何找到当前正在运行的Python脚本的完整路径?就是说,我要做什么才能做到这一点: 问题答案: 不是您要找的东西。不要使用意外的副作用 是 永远 的脚本路径(如果事实上脚本已经调用) -见http://docs.python.org/library/sys.html#sys.argv 是 当前正在执行的 文件(脚本或模块)的路径。这是 偶然 一样的,如果它是从脚本访问的脚本!如果要将

  • 我有以下格式的Apache Spark数据帧 我想在DataFrame中添加一个新列:PreviousPhaseName。此列应指示同一过程的前一个不同阶段。进程的第一阶段(具有最小ID的阶段)将与前一阶段一样具有。当一个阶段发生两次或两次以上时,第二次(第三次...)事件将具有相同的previousPhaseName,例如: 我不确定如何实施这一点。我的第一个方法是: 创建第二个空数据帧DF2

  • 发个面筋攒人品 秋招的第一个面试,吓尿了 1、数组常用的方法 2、怎么判断数据类型 3、css怎么让一个元素在页面上消失。。。css真的菜,没答出来 4、路由守卫 5、vue2和vue3的响应式原理 6、vue2对象添加属性怎么实现响应式 7、拷打项目,实现思路 真想不起来了,就面了30min,菜鸡流泪 #24届软开秋招面试经验大赏#

  • 写个面筋积累人品 话说还是太虚了,从华子特种兵回来以后,早上面平安的时候老脸通红(感觉那会烧得要晕过去了) 问的都比较基础 输入url后发生了什么 数组常用方法 盒子模型 接触过哪些前端应用场景 闭包以及使用场景 vue3有什么改进 css预处理器用过啥,有啥好处 怎么防止中间人 原型链 常用git操作 webpack以及其他打包工具用过啥 剩下的想不起来了,反正都是基础八股 面试官人很好,虽然说