Sql查询!有人可以解释一下吗?

时间:2018-02-02 07:23:48

标签: sql

enter image description here

Q1:列出各部门薪水最高的员工

Q2:列出同一部门没有老板的员工

Q1答案)

Select e.name, Max_Sal.Sal 
From Employees e 
  JOIN (Select d.DepartmentID,max(e.Salary) As Sal 
        From Employees e 
          JOIN Departments d ON e.DepartmentId=d.DepartmentId 
        Group by d.departmentID
  ) As Max_Sal 
    ON e.DepartmentId=Max_Sal.DepartmentID 
    and e.Salary=Max_Sal.Sal;

在第二季度,我不明白这个问题,[在同一个部门没有老板]。怎么知道老板在哪个部门?

2 个答案:

答案 0 :(得分:1)

  

Q2:列出在同一部门没有老板的员工

这个问题有一个小技巧。

1 - 加入

SELECT e.*
FROM Employees e
    LEFT OUTER JOIN Employees b on e.BossId = b.EmployeeId

请注意以下事项:

  • 我们已经两次使用Employees表,但我已经给它们分别命名了。 e是每个员工; b是该员工的老板。
  • 我们使用LEFT OUTER JOIN来说明员工没有老板的可能性(b将是NULL)如果我们使用了INNER JOIN,没有老板的员工会被遗漏在结果中。

现在,我们有一张每个员工的表,与他们的老板有关。但我们仍然需要按要求过滤列表。

2 - 过滤

员工可以处于三种可能的状态:

  1. 他们没有老板。
  2. 他们有一个老板,他在同一个部门工作。
  3. 他们有一个老板,他在另一个部门工作。
  4. 重要的是要意识到所要求的输出需要包含情况3中的员工和情况1中的员工。我们应该只省略情况2中的员工。

    使用伪SQL,这意味着您的查询应如下所示:

    SELECT *
    FROM the_data
    WHERE
        situation_1_applies
      OR
        situation_3_applies
    

    单个过滤器并不难写:

    SELECT e.*
    FROM Employees e
        LEFT OUTER JOIN Employees b on e.BossId = b.EmployeeId
    WHERE
        -- situation_1_applies
        -- When b is NULL, all of b's columns are NULL
        b.DepartmentId is NULL
      OR
        -- situation_3_applies
        b.DepartmentId <> e.DepartmentId
    

答案 1 :(得分:0)

在同一个部门中没有老板,因此您可以认为Employees表中的bossID为空。所以你可以为一个组写一个SQL查询所有人都有相同的部门谁拥有bossID是空的:),所以这不是真的因为员工必须有一个老板(不是null),如果你告诉我全部字段表,也许我会告诉你我的答案。

另一方面,您可以认为,他们具有相同的bossID,因此您的任务将为一个组写一个SQL查询,所有人都具有相同的bossID,但他们有不同的部门。

我有一个示例MySQL查询(对于相同的bossID但不同的部门):

    SELECT * FROM Employees as e
    INNER JOIN department d ON d.departmentId = e.deparmentId
    WHERE e.DepartmentID in (
        SELECT DepartmentID
            FROM Employees
            GROUP BY DepartmentID
        HAVING COUNT(*) = 1 /* it's fixed */
    ) AND e.BossID = 2 /* any value of bossID you want, you can join it with Boss table */


=====更新我的回答=====

我对这个问题有所了解。

任何人都必须有老板,而老板也是表SQL中的雇员。

    '    employeeName   '    department name '   boss name
    --------------------------------------------------------
    '    King           '    Director        '               
    '    Victor         '    Marketing       '   King
    '    Angela         '    Product         '   King
    '    Ken            '    Marketing       '   Victor
    '    LaLa           '    Marketing       '   Victor
    '    Jery           '    Business        '   Ken

因为在同一个部门没有老板 - &gt;他们的部门不能拥有他们的老板。 =&GT;结果如下表所示:

    '    employeeName   '    department name '   boss name
    --------------------------------------------------------
    '    King           '    Director        '               
    '    Victor         '    Marketing       '   King
    '    Angela         '    Product         '   King
    '    Jery           '    Business        '   Ken

如果您有正确的方法来理解这个问题,您可以在此发布,供所有人理解。感谢