Как суммировать разные критерии в SQL?

У меня есть данные, которые выглядят в 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 |
+-------------+------------------------+

Большое спасибо за ваше время, это казалось действительно простым, и теперь я очень расстроен.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
249
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, вы можете просто сделать:

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)

У менеджера есть собственные продажи, связанные с ним как с сотрудником, как в первом примере в таблице выше. Будет ли это дважды засчитывать доход менеджеров?

Crackers 10.08.2018 01:41

@Крекеры . . . Это зависит от того, что вы подразумеваете под «двойным счетом». Любая заданная строка в исходной таблице учитывается только один раз, даже первая строка в вашем примере.

Gordon Linoff 10.08.2018 03:23

Спасибо, как мне изменить то, что вы предоставили, чтобы включить несколько идентификаторов?

Crackers 10.08.2018 19:52

Например: WHERE (123,456) в (r.employee_id, r.manager_id);

Crackers 10.08.2018 19:53

Используйте объединение, чтобы добавить два выбора в одну «таблицу», а затем просуммировать их. Я думаю это должно сработать

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') 

)

Это предполагает, что я знаю, кто является менеджером, а кто - сотрудником, чего, к сожалению, я не знаю, если не запрошу запрос. Есть ли другой способ сделать это с объединением, в котором используется полный набор? Благодарю за ваш ответ!

Crackers 10.08.2018 01:47

я так не думаю. Возможно, ваша база данных имеет немного плохую структуру для выполнения задачи. Почему нельзя использовать это решение?

colorgreen 10.08.2018 02:46

Другие вопросы по теме