используя DECODE с FIRST ORDER_BY в запросе sql - PullRequest
2 голосов
/ 05 июня 2011

Я начал изучать 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 ...)

Итак, мои вопросы таковы:

  1. Будет ли MAX (SALARY) давать только одно значение?или он вернет все строки и отобразит максимальную зарплату?(т.е. если у меня есть 2 строки с зарплатой 1000 и 2000, результатом будут две строки, имеющие значения 2000)

  2. Каков «общий» эффект DENSE_RANK FIRST ORDER BY DECODE(...)?Я видел только примеры ORDER BY и не уверен, что произойдет, если это будет связано с DECODE.

спасибо

1 Ответ

1 голос
/ 06 июня 2011

1) да, одно значение

2) когда вы опустите KEEP (DENSE_RANK..., вы получите максимальную зарплату всех записей. С KEEP (DENSE_RANK... вы получите максимальную зарплату из всех записей, которые имеют наименьшую месячную и ненулевую зарплату. Задача выражения «DECODE» - исключить записи с нулевой зарплатой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...