我有两张桌子
employee_salary
salary_id emp_id salary
1 1 51000
2 2 30000
3 3 40000
4 4 20000
5 5 64000
6 6 47000
7 7 98000
员工 tabe结构
emp_id | first_name | last_name | gender | email | mobile | dept_id | is_active
鉴于工资板是
salary < 50000 as L
70000 < salary > 50000 as M
salary > 70000 as H
According to salary slab list out the employee who fall in which salary slab
答案 0 :(得分:3)
SELECT *,
CASE
WHEN salary < 50000 THEN 'L'
WHEN salary BETWEEN 50000 AND 70000 THEN 'M'
ELSE 'H'
END CASE AS slab
FROM employee_salary
加入员工表以获取姓名/个人信息留给读者练习。
答案 1 :(得分:1)
派生“薪水板”不是JOIN操作的问题,而是一个从现有列中得出“薪水板”值的表达式。
规范有点不完整,当工资正好等于70000或工资为NULL时,它没有指定“工资板”。
举个例子:
SELECT CASE
WHEN s.salary < 50000 THEN 'L'
WHEN s.salary < 70000 THEN 'M'
WHEN s.salary >= 70000 THEN 'H'
ELSE NULL
END AS salary_slab
, e.emp_id
, e.first_name
, e.last_name
, e.gender
, e.email
, e.mobile
, e.dept_id
, e.is_active
FROM employee_salary s
JOIN employee e
ON e.emp_id = s.emp_id
ORDER BY s.salary
此示例中的CASE
表达式“完成”规范,指定等于70000的工资在“工资单”“H”中,而工资的NULL值将返回“工资单”值NULL。
请注意ELSE NULL
可以省略,因为这是默认值。包括它不会改变行为,它只是突出了薪水可能为NULL的可能性。 (对于您的特定问题,这可能不是问题,如果列上存在NOT NULL约束。但是将此扩展到更一般的问题,对于搜索相同问题的答案的人来说,包含该问题可能是有益的。 )