2010. 职员招聘人数 II

SQL架构

表: Candidates

+-------------+------+
| Column Name | Type |
+-------------+------+
| employee_id | int  |
| experience  | enum |
| salary      | int  |
+-------------+------+
employee_id是此表的主键列。
经验是一个枚举,其中包含一个值(“高级”、“初级”)。
此表的每一行都显示候选人的id、月薪和经验。
每个候选人的工资保证是 唯一 的。

一家公司想雇佣新员工。公司的工资预算是 7 万美元。公司的招聘标准是:

  1. 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。
  2. 用剩下的预算雇佣薪水最低的初级职员。
  3. 继续以最低的工资雇佣初级职员,直到你不能再雇佣更多的初级职员。

编写一个SQL查询,查找根据上述条件雇用职员的 ID。
按 任意顺序 返回结果表。
查询结果格式如下例所示。

示例 1:

输入:
Candidates table:
+-------------+------------+--------+
| employee_id | experience | salary |
+-------------+------------+--------+
| 1           | Junior     | 10000  |
| 9           | Junior     | 15000  |
| 2           | Senior     | 20000  |
| 11          | Senior     | 16000  |
| 13          | Senior     | 50000  |
| 4           | Junior     | 40000  |
+-------------+------------+--------+
输出: 
+-------------+
| employee_id |
+-------------+
| 11          |
| 2           |
| 1           |
| 9           |
+-------------+
解释: 
我们可以雇佣2名具有ID(11,2)的高级员工。由于预算是7万美元,他们的工资总额是3.6万美元,我们还有3.4万美元,但他们不足以雇佣ID为 13 的高级职员。
我们可以雇佣2名ID为(1,9)的初级员工。由于剩余预算为3.4万美元,他们的工资总额为2.5万美元,我们还有9000美元,但他们不足以雇佣ID为 4 的初级员工。

示例 2:

输入:
Candidates table:
+-------------+------------+--------+
| employee_id | experience | salary |
+-------------+------------+--------+
| 1           | Junior     | 25000  |
| 9           | Junior     | 10000  |
| 2           | Senior     | 85000  |
| 11          | Senior     | 80000  |
| 13          | Senior     | 90000  |
| 4           | Junior     | 30000  |
+-------------+------------+--------+
输出: 
+-------------+
| employee_id |
+-------------+
| 9           |
| 1           |
| 4           |
+-------------+
解释: 
我们不能用目前的预算雇佣任何高级员工,因为我们需要至少 80000 美元来雇佣一名高级员工。
我们可以用剩下的预算雇佣三名初级员工。
with t1 as (select
employee_id,experience,salary,sum(salary) over(partition by experience order by salary rows between unbounded preceding and current row) so
#按 experience 分组开窗,按salary 生序排列逐一求和   然后 <=70000 就是能招聘的 员工
from
Candidates
),
t2 as (
select
"Senior" experience,employee_id,70000-ifnull(so,0) m   # 能招聘的 Senior 等级员工
from
t1
where
experience = "Senior" and so<=70000

)

select
employee_id
from
t2
union all #上下两表拼接 就是题中需求
select
employee_id # 能招聘的 Junior 等级员工    
from
t1
where
experience = "Junior" and so<=(select ifnull(min(m),70000) from t2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是回答您的问题: 为了显示所有职员的姓名及其所在部门的名称和工资,您需要使用SQL语句查询数据库中存储的相关信息。假设您的数据库中有两张表,一张是员工表(employee),包含员工的ID、姓名、部门ID和工资等字段;另一张是部门表(department),包含部门ID和部门名称等字段。 您可以使用以下SQL语句来实现: SELECT employee.name, department.name, employee.salary FROM employee INNER JOIN department ON employee.department_id = department.department_id; 上述SQL语句中,使用了INNER JOIN关键字将员工表和部门表连接起来,并通过部门ID来关联两个表。查询结果将包含员工姓名、所在部门名称和工资信息。 ### 回答2: 要显示所有职员的姓名及其所在部门的名称和工资,我们首先需要查询存储这些信息的数据库。通过查询数据库中的"员工"表,我们可以获得每个员工的姓名和所在部门的ID。然后,我们可以通过查询"部门"表来获取部门的名称。最后,我们还需要查询"工资"表,以获得每个员工的工资信息。 在查询过程中,我们需要使用适当的连接操作符来关联不同的表。例如,我们可以使用内连接操作符来关联"员工"表和"部门"表,以获取姓名和部门名称。之后,我们可以使用外连接操作符将上述结果与"工资"表关联,以获取完整的信息。 查询语句大致如下: SELECT E.姓名, D.部门名称, S.工资 FROM 员工 E INNER JOIN 部门 D ON E.部门ID = D.部门ID LEFT JOIN 工资 S ON E.员工ID = S.员工ID; 执行以上查询语句后,我们将得到所有员工的姓名、所在部门的名称和工资信息的结果集。这样,我们就可以以清晰的方式显示所有职员的姓名及其所在部门的名称和工资了。 注意:以上是一个简单的示例,实际情况可能因数据库结构和具体需求而有所不同。在实际开发中,可能需要根据具体情况进行适当的调整。 ### 回答3: 要显示所有职员的姓名及其所在部门的名称和工资,我们可以使用SQL语句来查询数据库。假设我们有两个表,一个是职员表(Employee)包含员工姓名、部门ID和工资信息,另一个是部门表(Department)包含部门ID和部门名称。下面是具体的查询语句: ``` SELECT Employee.Name, Department.Name AS Department, Employee.Salary FROM Employee JOIN Department ON Employee.DepartmentID = Department.ID; ``` 上述SQL语句使用了JOIN关键字来将两个表连接起来,连接条件是Employee表的部门ID等于Department表的ID。使用SELECT语句来选择要显示的字段,包括Employee表的姓名、Department表的名称(为了区分和Employee表的名称,使用了别名AS Department)、Employee表的工资。 执行以上SQL语句后,将会得到一个结果集,包含了所有职员的姓名、所在部门的名称和工资信息。这样就能够方便地查询到所有职员的相关信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值