给表“员工”
employee_id | salary | department_id
-------------+--------+---------------
只有使用SQL才能找到从一个部门转移到另一个部门的所有员工转移方式,因此“离职”部门和“到达”部门的平均薪水都在增长。
PS:我在一次采访中被问到这个问题,但从未给出答案,而Google几乎没有帮助。
给表“员工”
employee_id | salary | department_id
-------------+--------+---------------
只有使用SQL才能找到从一个部门转移到另一个部门的所有员工转移方式,因此“离职”部门和“到达”部门的平均薪水都在增长。
PS:我在一次采访中被问到这个问题,但从未给出答案,而Google几乎没有帮助。
Answers:
因此,您正在寻找收入低于当前部门平均水平但高于预期的新部门平均水平的员工。
获得满足此要求的所有员工调动的一种可能方法是
WITH departments
AS (SELECT AVG(salary) AS AvgSalary,
department_id
FROM employees
GROUP BY department_id)
SELECT e.employee_id,
dept_current.department_id AS current_department_id,
dept_new.department_id AS new_department_id
FROM employees e
JOIN departments dept_current
ON e.department_id = dept_current.department_id
AND dept_current.AvgSalary > e.salary
JOIN departments dept_new
ON dept_new.AvgSalary < e.salary
employees
。这将找到可以转移到该条件的所有部门(如果有)。
鉴于这是一个面试问题(而不是测试问题),所以取决于上下文,有几种可能性。
如前所述,问题不完整, 不能也许不应该以当前的形式回答(请参见下面的“更新”部分)。缺什么?好吧,例如:
如果这更多的是OLTP表,则应在employee_id
字段上定义PK /唯一索引/唯一约束。在那种情况下,每个记录只有一个条目employee_id
,因此无法确定转移(即没有“旧” department_id
记录)。
如果这更多是一个OLAP表,则它可能是一个缓慢变化的维,在这种情况下将有多个employee_id
记录。但是,还需要有ValidFrom
和ValidTo
DATE / DATETIME字段,以便可以按正确的顺序确定出发和到达部门。没有这些字段,就无法确定哪个部门是出发地,哪个部门是到达地。而且不知道这种区别将允许取回与请求相反的记录。
因此,有关如何解释此问题的“上下文”就是这样陈述问题的原因。
您在面试和在此处提问之间忘记了一些细节:
它确实发生了,但是如果是这种情况,那么您要么需要更新问题以填写缺少的信息,要么就无法回答(至少就获得有意义的答案而言)。
该问题已在此处准确记录下来,并且面试官不知道这些问题或并非故意将这些问题考虑在内:
在这种情况下,如果您知道这些问题并且他们期望得到答案,那么您可以使用它作为除掉可能的雇主之外的手段;-)。
该问题已在此处准确记录,这些问题已为面试官所了解或为他们所预期:
在这种情况下,他们可能会以此为手段,除查看原始的技术能力外,还将人们除草。在大多数情况下,提出问题要非常清楚,因为大多数最终用户和产品所有者等不会以低级的技术细节来思考/说话,因此往往会遗漏必要的内容。重要的是不要假设而是要回到请求的源头进行澄清,以免浪费时间在错误的方向上工作。
请记住,您并不是在面试,只是简单地回答技术问题。您正在面试一个从事项目工作的职位,而在要求做的事情上总会有歧义和/或误导性信息。一位优秀的面试官将设法了解您的技能水平以及您是否真正有生产力。在采访人们时,我曾问过类似的问题,以淘汰那些在回答技术问题上表现出色的人,但是他们需要太多的手把手,最终会拖慢团队的速度。
更新:
只是为了澄清那些觉得这是一个简单查询技能问题的人的澄清,解释为@Martin在他的回答中所做的事情:我们甚至不知道这是否是提交给OP的问题的确切措词,但是我们确实知道,在我们可以相信的情况下,这是在一次采访中给出的。和好面试官提出的问题是,不仅要培养候选人的技术技能,还要培养他们的非技术/“软”技能。马丁很正确的解释是,这个问题正在询问潜在的未来转移组合(即“有时雪茄只是雪茄”),这很可能是正确的。如果这是一个测试问题,那么如果他的回答不正确,我将感到惊讶。但是,这不是测试问题。当然,这可能是一个面试问题,某个人不想看到候选人是什么类型的人,以及他们在设计会议上的表现如何,而这种会议通常会引起大多数人甚至不知道。但是没有给出答案,完成工作(在页面上搜索“您正在寻找谁的人”,但您应该真正阅读全部内容)。因此,在所有方式上都是平等的两个候选人之间,其中一个假设了解释并且是正确的,而另一个问了问题然后又得到了正确的答案,我肯定会同意第一个问的人。