在SQL查询中使用带有FIRST ORDER_BY的DECODE

时间:2011-06-05 15:39:29

标签: sql oracle

我已经开始学习SQL了,在浏览一些阅读材料时,我偶然发现了这个问题:

SELECT MAX(SALARY) KEEP (DENSE_RANK FIRST ORDER BY 
    DECODE (SALARY, NULL, NULL, MONTHLY_SAL) NULLS LAST)

我已经尝试阅读这意味着什么,并提出以下建议(请原谅我冗长的啰嗦和无用的解释):

  1. DECODE(SALARY,NULL,NULL,MONTHLY_SAL)NULLS LAST - 将返回MONTHLY_SAL,除非SALARY为NULL。 NULL工资也将在最后列出。

  2. MAX(SALARY) - 将给出(DENSE_RANK ...)

  3. 产生的最高工资

    所以我的问题是这些:

    1. MAX(SALARY)只会给出一个值吗?还是会返回所有行并显示最高工资? (即如果我有2行的工资为1000和2000,结果将是两行,其值为2000)

    2. DENSE_RANK FIRST ORDER BY DECODE(...)的“总”效果是什么?我只看过ORDER BY的例子,如果再加上DECODE,我不确定会发生什么。

    3. 谢谢

1 个答案:

答案 0 :(得分:1)

1)是,一个值

2)当您省略KEEP (DENSE_RANK...时,您将获得所有记录的最高工资。 使用 KEEP (DENSE_RANK...,您将从所有具有最小monthly_sal和非空工资的记录中获得最高薪水。 'DECODE'表达式的工作是排除空薪的记录。