我已经开始学习SQL了,在浏览一些阅读材料时,我偶然发现了这个问题:
SELECT MAX(SALARY) KEEP (DENSE_RANK FIRST ORDER BY
DECODE (SALARY, NULL, NULL, MONTHLY_SAL) NULLS LAST)
我已经尝试阅读这意味着什么,并提出以下建议(请原谅我冗长的啰嗦和无用的解释):
DECODE(SALARY,NULL,NULL,MONTHLY_SAL)NULLS LAST - 将返回MONTHLY_SAL,除非SALARY为NULL。 NULL工资也将在最后列出。
MAX(SALARY) - 将给出(DENSE_RANK ...)
所以我的问题是这些:
MAX(SALARY)只会给出一个值吗?还是会返回所有行并显示最高工资? (即如果我有2行的工资为1000和2000,结果将是两行,其值为2000)
DENSE_RANK FIRST ORDER BY DECODE(...)的“总”效果是什么?我只看过ORDER BY的例子,如果再加上DECODE,我不确定会发生什么。
谢谢
答案 0 :(得分:1)
1)是,一个值
2)当您省略KEEP (DENSE_RANK...
时,您将获得所有记录的最高工资。 使用 KEEP (DENSE_RANK...
,您将从所有具有最小monthly_sal和非空工资的记录中获得最高薪水。 'DECODE'表达式的工作是排除空薪的记录。