Исключить совпадающие идентификаторы из таблицы подзапросов / cte / temp в иерархии? - PullRequest
0 голосов
/ 15 января 2019

Я не совсем уверен, с чего начать ...

У меня есть одна таблица, которая содержит EMPLOYEE_ID, HOURS_WORKED, DEPARTMENT. Я пытаюсь получить случайную выборку клиентов в этом иерархическом порядке:

(1.) Сначала я хочу получить случайную выборку из 500 всех сотрудников

(2.) Далее я хочу выбрать случайную выборку из 500 сотрудников, работающих в ОТДЕЛЕ B, и убедиться, что она исключает все EMPLOYEE_ID из тех, кого втянули (1.)

(3.) Мне нужна случайная выборка из 500 сотрудников, которые работают в ОТДЕЛ C, и убедитесь, что она исключает все EMPLOYEE_ID из тех, кто извлек (1.) и (2.)

Может ли кто-нибудь предоставить мне некоторые подробности о том, как это сделать? Я новичок в этом и никогда раньше не выполнял такой запрос, поэтому чем больше деталей, тем лучше!

Я догадываюсь, что мне понадобится составить временные таблицы и использовать UNION ALL в конце, чтобы объединить все ? Я использую Postgresql для взаимодействия с Amazon Redshift.

1 Ответ

0 голосов
/ 15 января 2019

Вы можете попробовать, если вам подходит использование 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;
...