我不太确定从哪开始...
我有一张表,其中包含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进行交互。
答案 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;