У меня есть данные, которые выглядят в Redshift так:
+-------------+------------+---------+
| Employee_ID | Manager_ID | Revenue |
+-------------+------------+---------+
| 123 | 123 | 1015.24 |
| 541 | 123 | 5587.23 |
+-------------+------------+---------+
Я хочу написать запрос, который суммирует доход менеджера при вводе Manager_ID и суммирует доход сотрудников при вводе Employee_ID. В настоящее время у меня есть запрос, который выглядит примерно так, и мне нужно запустить его дважды:
SELECT
sum(revenue) as revenue
FROM
employee_rev r
WHERE
r.manager_id in ('123','124') --I change this to employee_ID the second time around
Если это поможет, есть еще одна такая таблица:
+-------------+------------------------+
| Employee_ID | Role |
+-------------+------------------------+
| 123 | Manager |
| 541 | Individual Contributor |
+-------------+------------------------+
Большое спасибо за ваше время, это казалось действительно простым, и теперь я очень расстроен.


Я думаю, вы можете просто сделать:
SELECT sum(revenue) as revenue
FROM employee_rev r
WHERE 123 in (r.employee_id, r.manager_id);
То есть для данного идентификатора ищите в обоих столбцах. Сотрудник никогда не должен находиться в столбце «Менеджер», чтобы он, казалось, делал то, что вы хотите.
Обновлено:
Для нескольких идентификаторов вам придется тестировать независимо. Или:
WHERE 123 IN (r.employee_id, r.manager_id) OR
456 IN (r.employee_id, r.manager_id)
или:
WHERE r.employee_id in (123, 456) OR
r.manager_id in (123, 456)
@Крекеры . . . Это зависит от того, что вы подразумеваете под «двойным счетом». Любая заданная строка в исходной таблице учитывается только один раз, даже первая строка в вашем примере.
Спасибо, как мне изменить то, что вы предоставили, чтобы включить несколько идентификаторов?
Например: WHERE (123,456) в (r.employee_id, r.manager_id);
Используйте объединение, чтобы добавить два выбора в одну «таблицу», а затем просуммировать их. Я думаю это должно сработать
SELECT sum(result) from (
SELECT
sum(revenue) as result
FROM
employee_rev r
WHERE
r.manager_id in ('123')
UNION ALL
SELECT
sum(revenue) as result
FROM
employee_rev r
WHERE
r.employee_id in ('124')
)
Это предполагает, что я знаю, кто является менеджером, а кто - сотрудником, чего, к сожалению, я не знаю, если не запрошу запрос. Есть ли другой способ сделать это с объединением, в котором используется полный набор? Благодарю за ваш ответ!
я так не думаю. Возможно, ваша база данных имеет немного плохую структуру для выполнения задачи. Почему нельзя использовать это решение?
У менеджера есть собственные продажи, связанные с ним как с сотрудником, как в первом примере в таблице выше. Будет ли это дважды засчитывать доход менеджеров?