[英]MYSQL: JOIN two tables based on range on one table
我有兩張桌子
員工工資
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
員工禁忌結構
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
SELECT *,
CASE
WHEN salary < 50000 THEN 'L'
WHEN salary BETWEEN 50000 AND 70000 THEN 'M'
ELSE 'H'
END CASE AS slab
FROM employee_salary
參加員工表以獲取姓名/個人信息留給讀者練習。
派生“薪水平板”與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
表達式“完成”了規范,並指定“薪水板”“ H”中有等於70000的薪水,而薪水的NULL值將返回NULL的“薪水板”值。
請注意,因為這是默認設置,所以可以省略ELSE NULL
。 包括它並不會改變行為,它只是強調了薪金可能為NULL的可能性。 (如果您的特定問題在列上沒有NOT NULL約束,那么這可能不是問題。但是將其擴展到更一般的問題,對於尋找相同問題答案的人來說,將其包括在內可能是有益的。 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.