нахождение суммы столбца с определенными c значениями столбца в SQL с использованием группы по - PullRequest
1 голос
/ 27 мая 2020

У меня есть таблица со следующими столбцами:

amount   employee   
100        a
200        a
300        b
400        b
500        c

Я хочу получить вывод в той же таблице, которая группирует на основе сотрудника «a» и остальных (кроме a) и дает сумма суммы, исходя из группировки. Желаемый результат:

amount  employee 
300            a 
1200         rest 

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Преобразуйте значения сотрудников с помощью CASE WHEN и сгруппируйте преобразованное значение:

SELECT 
    CASE WHEN employee = 'a' THEN 'a' ELSE 'rest' END as e,
  SUM(amount) as a
FROM
  t
GROUP BY
  CASE WHEN employee = 'a' THEN 'a' ELSE 'rest' END

Вы также можете использовать UNION:

SELECT 
  MAX(emlpoyee) as e,
  SUM(amount) as a
FROM
  t
WHERE employee = 'a'

UNION ALL

SELECT 
  'rest' as e,
  SUM(amount) as a
FROM
  t
WHERE employee <> 'a'

Второй способ, вероятно, будет более ресурсоемким, но может быть легче понять и поддерживать, поэтому вам нужно решить, цените ли вы прямую производительность или удобство для разработчиков. (Для запроса, выполняемого один раз в день для сотни сотрудников, вы можете утверждать, что было бы лучше, если бы запрос был более легким для понимания. Для запроса, выполняющего десятки тысяч сотрудников в секунду, производительность должна иметь приоритет)

0 голосов
/ 27 мая 2020

Пожалуйста, используйте запрос ниже,

select sum(amount), employee from
(select 
amount, case when employee = 'a' then employee else 'Rest' end as employee
from table t) t1
group by employee;
0 голосов
/ 27 мая 2020

Используйте выражение case для ключа group by:

select (case when employee = 'a' then employee else 'rest' end) as employee,
       sum(amount)
from t
group by (case when employee = 'a' then employee else 'rest' end) ;

Здесь - скрипт db <>. (Здесь используется MySQL, но это стандартный SQL и будет работать в любой базе данных.)

...