为什么这个 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);
我想 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);