Если зарплата сотрудника составляет до 5000, то звание = 1, до 100 тысяч, то звание = 2 и так далее.мы можем получить результат, используя функцию ранга? - PullRequest
0 голосов
/ 23 мая 2019

Если зарплата работника ниже 50 000, то ранг = 1, до 100 000, затем ранг 2, до 150 000, затем ранг 3. Могу ли я получить это с помощью функции ранга?

SELECT CASE WHEN SALARY BETWEEN 1 , 50000 then 1 
else case when salary between 50000 , 100000 then 2
else case when salary between 150000 , 200000 then 3 else 4 end as rank FROM EMPLOYEE WHERE EMP = 1

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Из ваших комментариев кажется, что вам просто нужен способ вычислить ранг для интервалов 50,000, поэтому вам не нужно использовать последовательные CASE выражения. Это можно сделать достаточно просто, используя простое целочисленное деление, а не функцию RANK:

SELECT *, CAST(salary / 50000 AS INT) + 1 AS Rnk
FROM Employee

дает вам следующие результаты:

+-----+-----------+-----+
| emp |  salary   | rnk |
+-----+-----------+-----+
|   1 |  49000.00 |   1 |
|   2 |  50000.00 |   2 |
|   3 |  99000.00 |   2 |
|   4 | 100000.00 |   3 |
|   5 | 149000.00 |   3 |
|   6 | 150000.00 |   4 |
+-----+-----------+-----+

При желании вы также можете добавить его в качестве вычисляемого столбца (и индексировать его) по своему усмотрению.

0 голосов
/ 23 мая 2019

Ваш синтаксис неправильный, вот как следует использовать CASE:

SELECT 
    CASE 
        WHEN salary BETWEEN 1 AND 49999 THEN 1 
        WHEN salary BETWEEN 50000 AND 99999 THEN 2
        WHEN salary BETWEEN 100000 AND 150000 THEN 3 
        ELSE 4 
    END AS rnk 
FROM EMPLOYEE 
WHERE EMP = 1 -- I'm not sure what you trying to filter here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...