为什么这个 select select 没有行

Why this select selects no rows

我想 select 成为 'IT' 部门中收入最高的人,但我没有保持 select 行。 薪水和名字在 table 中称为员工,而 department_name 在 table 命名的部门中。 谁能解释一下为什么 select 没有行,我应该怎么做?

SELECT first_name, last_name, salary, department_name
FROM employees
JOIN departments on departments.department_id = employees.department_id
WHERE salary = (SELECT max(salary) FROM employees WHERE department_name = 'IT'); 

使用row_number()

SELECT t.*
FROM (SELECT emp.first_name, emp.last_name, dempt.salary, dempt.department_name,
             ROW_NUMBER() OVER(PARTITION BY dept.department_name ORDER BY dept.salary DESC) AS SEQ
      FROM employees emp JOIN 
           departments dept 
           ON dept.department_id = emp.department_id
      WHERE dempt.department_name = 'IT'
     ) t
WHERE seq = 1;

如果薪水有联系,那么您可以改用 rank()

如果 IT 部门有不止一位最高收入者,您可以使用 dense_rank

select   
    first_name, 
    last_name, 
    salary, 
    department_name
from
(
    select 
        first_name, 
        last_name, 
        salary, 
        department_name,
        dense_rank() over (partition by department_name order by salary desc) as rnk
    FROM employees e
    JOIN departments d
    on d.department_id = e.department_id
    where department_name = 'IT'
) val
where rnk = 1

Why this select selects no rows?

您的查询失败,因为 employees table 中没有列 department_name。所以你的子查询没有达到你的预期:

where salary = (SELECT max(salary) FROM employees WHERE department_name = 'IT'); 

如果你想用子查询做这个,你需要关联它:

select e.first_name, e.last_name, e.salary, d.department_name
from employees e
inner join departments d on d.department_id = e.department_id
where 
    d.department_name = 'IT'
    and e.salary = (select max(e1.salary) 
                    from employees e1 
                    where e1.department_id = e.department_id);