繁体   English   中英

SQL 查询获取员工姓名,提供员工姓名的薪水

[英]SQL Query to fetch emloyee name, salary where employee name is provided

对于包含列 EmpId、名称和Salary表的Employee表,包含列 Id、EmpId、工资,其中工资表的 EmpId 是员工表的外键。 可不可以写一个SQL的查询,让结果包含每个员工的姓名和一个员工姓名提供的所有员工的工资?

样本数据

Employee

EmpId      Name       
 1         Alice      
 2         Bob        
 3         Charlie     
 4         Doug        

Salary

样本数据

 Id      EmpId       Salary 
 1         1       1000
 2         2       2000 
 3         3       3000 
 4         4       4000 

查询我试过,但看不到,我如何写员工姓名,比如 Bob,我想在哪里获取薪水高于 Bob 的员工。 下面的查询给出了工资角度的结果,但是如何通过员工姓名获取?

--更新了 Order By Clause,谢谢@Strawberry

    SELECT s.salary
    , e.empname 
    FROM
    test.employee as e, test.salary as s 
    WHERE s.empid = e.empid AND s.salary > 2000 
    ORDER BY s.Salary DESC 
    LIMIT 3;

这是您可以用来获取 Bob 的薪水的查询:

SELECT Salary
FROM salary
WHERE EmpId = 2;

现在,您想要获取薪水高于上述查询结果的员工的所有姓名和薪水。 因此,您将在 WHERE 中将上述查询用作嵌套查询。 给你go:

SELECT employee.EmpId, employee.Name, salary.Salary
FROM employee
JOIN salary ON employee.EmpId = salary.EmpId
WHERE salary > (
                    SELECT Salary
                    FROM salary
                    WHERE EmpId = 2
                );

编辑 - 在下面的评论中你说你想按名称而不是 EmpId 进行过滤。 因此,您可能想使用WHERE Name="Bob"进行过滤。 问题是名称通常不是唯一的。 因此,您可能有两个名为“Bob”的人。 如果是这种情况,您必须想出一个解决方案来获得哪些薪水——它们可能不同。

这是一个示例查询,它将获取所有 Bob 中薪水最高的名为“Bob”的人的薪水,然后过滤其他员工以使其薪水高于源头:

SELECT employee.EmpId, employee.Name, salary.Salary
FROM employee
JOIN salary ON employee.EmpId = salary.EmpId
WHERE salary > (
                    SELECT MAX(Salary)
                    FROM salary
                    WHERE EmpId IN (
                        SELECT EmpId
                        FROM employee
                        WHERE Name="Bob"
                    )
                );

如果没有名为“Bob”的人,最终可能会出现问题。 上面的查询将返回一个空集。 如果你想打印所有人,你可以这样做:

SELECT employee.EmpId, employee.Name, salary.Salary
FROM employee
JOIN salary ON employee.EmpId = salary.EmpId
WHERE salary > (
                    SELECT IF(MAX(Salary) IS NULL, 0, MAX(Salary))
                    FROM salary
                    WHERE EmpId IN (
                        SELECT EmpId
                        FROM employee
                        WHERE Name="Bob"
                    )
                );

现在如果没有“Bob”,它仍然会打印所有薪水高于 0 的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM