我正在 leetcode 上练习 SQL,遇到了以下问题 - 我很困惑为什么我的解决方案不起作用。
下面是一张员工表,其中显示了员工所在的部门以及其主要部门。如果一名员工仅属于一个部门 ID,则其主要标志将显示“N”(即使这是他们的主要部门,也是唯一的部门),如果他们有多个部门,则会将“Y”或“N”标记为显示哪一个是主要的。测试用例的数据如下所示
输入:
员工表:
员工_id | 部门_id | 主要_标志 |
---|---|---|
1 | 1 | N |
2 | 1 | 是 |
2 | 2 | N |
3 | 3 | N |
4 | 2 | N |
4 | 3 | 是 |
4 | 4 | N |
输出:
员工_id | 部门_id |
---|---|
1 | 1 |
2 | 1 |
3 | 3 |
4 | 3 |
说明:
这是我的解决方案,没有任何返回。为什么这不起作用。预期的输出应该是上面的输出表中的输出,但此查询不返回任何内容。没有空值,当我单独运行子查询时,它显示不应该出现在最终输出中的employee_id、department_ids。所以我想看看为什么这不起作用。
select employee_id, department_id
from Employee
WHERE (employee_id, department_id) not in(
select employee_id, department_id
from (
SELECT employee_id, department_id, primary_flag,
count(employee_id) over (partition by employee_id) as cnt
from employee
) a
WHERE cnt > 1 and primary_flag = 'n'
);
我将员工和部门合并在一起
CREATE TABLE [Employee]
(
[employee_id] INT,
[department_id] VARCHAR(512),
[primary_flag] VARCHAR(512)
);
INSERT INTO [Employee] ([employee_id], [department_id], [primary_flag]) VALUES
('1', '1', 'N'),
('2', '1', 'Y'),
('2', '2', 'N'),
('3', '3', 'N'),
('4', '2', 'N'),
('4', '3', 'Y'),
('4', '4', 'N');
Select * from Employee
select employee_id, department_id
from Employee
WHERE cast(employee_id as varchar(10)) + '|' + cast(department_id as varchar(10)) not in(
select cast(employee_id as varchar(10)) + '|' + cast(department_id as varchar(10))
from (
SELECT employee_id, department_id, primary_flag,
count(employee_id) over (partition by employee_id) as cnt
from employee
) a
WHERE cnt > 1 and primary_flag = 'n'
);
员工_id | 部门_id |
---|---|
1 | 1 |
2 | 1 |
3 | 3 |
4 | 3 |