从hieracrchy中的子查询/ cte / temp表中排除匹配的ID?

时间:2019-01-14 21:40:54

标签: sql amazon-redshift

我不太确定从哪开始...

我有一张表,其中包含EMPLOYEE_ID,HOURS_WORKED和DEPARTMENT。 我正在尝试按此分层顺序随机获取客户样本:

(1。)首先,我希望从所有员工中随机抽取500名

(2。)接下来,我要随机抽取500名在部门B工作的员工样本,并确保其中不包括(1.)的所有EMPLOYEE_ID。

(3。)我想随机抽取500名在部门C工作的员工样本,并确保其中不包括(1.)和(2.)中所有员工的EMPLOYEE_ID。

有人可以向我提供有关如何执行此操作的详细信息吗?我是新来的,以前从未运行过这样的查询,因此,越详细越好!

我的直觉是,这将需要我在整个过程中制作 temp表,并在最后使用UNION ALL来组合所有内容?我正在使用Postgresql与Amazon Redshift进行交互。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用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;