2011-06-05 46 views
2

我已經開始學習SQL,並在瀏覽了幾個閱讀材料我偶然在此查詢:在SQL查詢中使用DECODE與FIRST ORDER_BY

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

我已經試過這意味着什麼,並已閱讀了想出以下(請原諒我的長篇大論和noobish解釋):

  1. DECODE(工資,NULL,NULL,MONTHLY_SAL)NULLS LAST - 將返回MONTHLY_SAL除非工資是NULL。空薪也將在最後列出。

  2. MAX(工資) - 將給這將導致從頂薪(DENSE_RANK ...)

所以我的問題是:

  1. 威爾MAX(工資)只給一個價值?還是會返回所有行並顯示最高工資? (即如果我有2行的工資爲1000和2000,結果將是兩行,其值爲2000)

  2. DENSE_RANK FIRST ORDER BY DECODE(...)的「total」效果是什麼?我只看到了ORDER BY的例子,我不確定如果這與DECODE結合會發生什麼。

謝謝

回答

1

1)是的,一個價值

2)當你忽略KEEP (DENSE_RANK...你會得到所有記錄的最高薪水。 WithKEEP (DENSE_RANK...您將從月薪最小且薪金非空的所有記錄中獲得最高工資。 「DECECE」表達的工作是排除薪金爲空的記錄。

+0

嗨。謝謝回覆!關於「'DECODE'表達的工作是排除無薪薪水的記錄」,它是如何做到的?我的意思是,我認爲空薪水仍然被退還和檢查,然後檢查最大值? – user582485 2011-06-05 23:19:09

+0

DECODE提供ORDER BY的值。當Decode遇到SALARY = null的記錄時,它將返回null。否則它將返回MONTHLY_SAL。由於ORDER BY還指定NULLS LAST(這是默認的BTW),所以第一條記錄將是DECODE導致某些內容不爲null的記錄。 – 2011-06-06 11:10:19