【问题标题】:Difference in Salary in Oracle Select StatementOracle Select 语句中的工资差异
【发布时间】:2021-02-05 11:29:52
【问题描述】:

我的下表包含三列(Empno、Ename、Salary)

Empno  Ename  Salary 
101    Ashok  1000
102    Kumar  2000
103    Mani   3000

我需要通过显示工资差异来输出下面的内容。

Empno Ename  Salary  Difference_in_Salary
101   Ashok  1000     1000
102   Kumar  2000     1000
103   Mani   3000     1000

【问题讨论】:

  • 你是如何计算你的“差异”的?

标签: sql oracle oracle9i


【解决方案1】:

有很多方法可以计算“差异”,因为这取决于您想要的差异:

SELECT t.*,
       ABS( salary - AVG( salary ) OVER () )                  AS difference_from_avg,
       LEAD( salary ) OVER ( ORDER BY salary ) - salary       AS difference_from_next,
       salary - LAG( salary, 1, 0 ) OVER ( ORDER BY salary )  AS difference_from_prev,
       salary - MIN( salary ) OVER ()                         AS difference_from_min,
       MAX( salary ) OVER () - salary                         AS difference_from_max
FROM   table_name t

其中,对于您的示例数据:

CREATE TABLE table_name ( Empno, Ename, Salary ) AS 
SELECT 101, 'Ashok', 1000 FROM DUAL UNION ALL
SELECT 102, 'Kumar', 2000 FROM DUAL UNION ALL
SELECT 103, 'Mani',  3000 FROM DUAL;

输出:

EMPNO |姓名 |工资 | DIFFERENCE_FROM_AVG | DIFFERENCE_FROM_NEXT | DIFFERENCE_FROM_PREV | DIFFERENCE_FROM_MIN | DIFFERENCE_FROM_MAX ----: | :---- | -----: | ------------------: | -------------------: | -------------------: | ------------------: | ------------------: 101 |阿肖克 | 1000 | 1000 | 1000 | 1000 | 0 | 2000 102 |库马尔 | 2000 | 0 | 1000 | 1000 | 1000 | 1000 103 |玛尼 | 3000 | 1000 | | 1000 | 2000 | 0

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2011-08-27
    • 2011-11-11
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多