-1

如果员工的工资低于 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
4

2 回答 2

1

从您的评论看来,您似乎只需要一种方法来计算 的区间的排名50,000,因此您不必使用连续的CASE表达式。这可以使用简单的整数除法而不是RANK函数很容易地完成:

SELECT *, CAST(salary / 50000 AS INT) + 1 AS Rnk
来自员工

给你这些结果:

+-----+------------+------+
| 雇员 | 工资 | 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 |
+-----+------------+------+

如果需要,您还可以根据需要将其添加为计算列(并为其编制索引)。

于 2019-05-23T11:30:26.463 回答
0

您的语法不正确,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
于 2019-05-23T10:55:07.643 回答