在默认模式HR上我有以下查询,根据工资类别将每个部门的员工数量划分为范围
c组,薪水范围为(+).... etc
选择 案件 什么时候工资< = 5000那么'A' 当工资> = 10000那么'B' 什么时候工资> = 15000那么'C' ELSE'+' 结束AS类别, COUNT(*)AS emp_count,department_id 来自员工 通过...分组 案件 什么时候工资< = 5000那么'A' 当工资> = 10000那么'B' 什么时候工资> = 15000那么'C' ELSE'+' END,department_id ORDER BY department_id; /
但我的问题是最大和最低工资是未知的,或者如果范围较小,那么我必须编写大量代码才能获得结果 那么他们的任何其他方式都比这个更好吗?
答案 0 :(得分:0)
以下是我之前提出的问题的解决方案,但另一个问题我发现有人在选择部分解码关键字之后使用介于之后获得相同的结果但不重复部门行多个... 结果将是 我不记得他是如何在我记忆中做到的那样
选择1到1000之间的薪水解码....
Dept_name Salary_Class Employee_count
----------- -------------- -----------------
Dept_name1 Class A 3
Dept_name2 Class B 5
Dept_name3 Class C 1
SELECT b.department_name,
CASE
WHEN a.salary <= 5000 THEN 'Class A'
WHEN a.salary >= 10000 THEN 'Class B'
WHEN a.salary <= 15000 THEN 'Class C'
WHEN a.salary >= 20000 THEN 'Class D'
WHEN a.salary <= 25000 THEN 'Class E'
END AS salary_class,
COUNT(a.employee_id) AS employee_count
FROM hr.employees a, departments b
WHERE b.department_id = a.department_id
GROUP BY
CASE
WHEN a.salary <= 5000 THEN 'Class A'
WHEN a.salary >= 10000 THEN 'Class B'
WHEN a.salary <= 15000 THEN 'Class C'
WHEN a.salary >= 20000 THEN 'Class D'
WHEN a.salary <= 25000 THEN 'Class E'
END,
department_name
ORDER BY department_name;