2023年9月23日 星期六

9/23 每日一題(MYSQL 尋找salary小於30000且 他的上屬經理已經離職的員工)

Table: Employees

+-------------+----------+
| Column Name | Type     |
+-------------+----------+
| employee_id | int      |
| name        | varchar  |
| manager_id  | int      |
| salary      | int      |
+-------------+----------+
In SQL, employee_id is the primary key for this table.
This table contains information about the employees, their salary, and the ID of their manager. Some employees do not have a manager (manager_id is null). 

 

Find the IDs of the employees whose salary is strictly less than $30000 and whose manager left the company. When a manager leaves the company, their information is deleted from the Employees table, but the reports still have their manager_id set to the manager that left.

Return the result table ordered by employee_id.

The result format is in the following example.

 

Example 1:

Input:  
Employees table:
+-------------+-----------+------------+--------+
| employee_id | name      | manager_id | salary |
+-------------+-----------+------------+--------+
| 3           | Mila      | 9          | 60301  |
| 12          | Antonella | null       | 31000  |
| 13          | Emery     | null       | 67084  |
| 1           | Kalel     | 11         | 21241  |
| 9           | Mikaela   | null       | 50937  |
| 11          | Joziah    | 6          | 28485  |
+-------------+-----------+------------+--------+
Output: 
+-------------+
| employee_id |
+-------------+
| 11          |
+-------------+

Explanation: 
The employees with a salary less than $30000 are 1 (Kalel) and 11 (Joziah).
Kalel's manager is employee 11, who is still in the company (Joziah).
Joziah's manager is employee 6, who left the company because there is no row for employee 6 as it was deleted.


 # Write your MySQL query statement below

select employee_id from Employees
where salary <30000 and manager_id not in (select employee_id from Employees )
order by employee_id

-------------------------
select e1.employee_id
from 
Employees as e1 
left join 
Employees as e2 
on e1.manager_id=e2.employee_id
where e1.salary<30000 and e2.employee_id is null and e1.manager_id is not null 
order by employee_id;

-----------------

import pandas as pd

def find_employees(employees: pd.DataFrame) -> pd.DataFrame:
    print(employees[(employees['salary']<30000) & (~employees['manager_id'].isin(employees['employee_id']) )  ] )
    return employees[(employees['salary']<30000) & (~employees['manager_id'].isin(employees['employee_id']) ) ][['employee_id']]

標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁