是否从层次结构中的子查询/cte/temp表中排除匹配的ID



我真的不确定从哪里开始。。。

我有一个表,其中包含EMPLOYEE_ID、HOURS_WORKED、DEPARTMENT。我正试图按照以下分层顺序随机抽取客户样本:

(1.)首先,我想随机抽取500名员工

(2.)接下来,我想要一个在B部门工作的500名员工的随机样本,并确保它排除了所有被拉入的员工的EMPLOYEE_ID(1.)

(3.)我想要一个在C部门工作的500名员工的随机样本,并确保它排除了(1.)和(2.)

有人能给我提供一些关于如何做这件事的细节吗?我是新手,以前从未运行过这样的查询,因此细节越多越好!

我的直觉是,这将要求我在制作临时表的过程中,并在最后使用UNION ALL来组合所有东西?我正在使用Postgresql与Amazon Redshift进行交互。

您可以尝试使用CTE是否适用。

WITH
x AS
(
SELECT *
FROM elbat t
ORDER BY random()
LIMIT 500
),
b AS
(
SELECT *
FROM elbat t
WHERE t.department = 'B'
AND NOT EXISTS (SELECT *
FROM x
WHERE t.employee_id = x.employee_id)
ORDER BY random()
LIMIT 500
),
c AS
(
SELECT *
FROM elbat t
WHERE t.department = 'C'
AND NOT EXISTS (SELECT *
FROM x
WHERE t.employee_id = x.employee_id)
AND NOT EXISTS (SELECT *
FROM b
WHERE t.employee_id = b.employee_id)
ORDER BY random()
LIMIT 500
)
SELECT *
FROM x
UNION ALL
SELECT *
FROM b
UNION ALL
SELECT *
FROM c;

最新更新