У меня есть данные со следующими столбцами:
OFFICER_ID, CLIENT_ID, SECURITY_CODE, POSITION_SIZE
, а затем по каждой строке, например:
officer1, client100, securityZYX, $100k,
officer2, client124, securityADF, $200k,
officer1, client130, securityARR, $150k,
officer4, client452, securityADF, $200k,
officer2, client124, securityARR, $500k,
officer7, client108, securityZYX, $223k,
and so on.
Как видите, у каждого клиента есть один сотрудник, назначенный либокупить или продать ценные бумаги, но каждый клиент мог купить разные ценные бумаги.
Помимо рейтинговых офицеров по общей сумме в долларах США ценных бумаг, находящихся у их клиентов (что я и сделал), мне нужно создать диапазоны общегоучетные записи клиентов путем добавления общего количества ценных бумаг, удерживаемых по идентификатору клиента, например, общая сумма ценных бумаг <1 миллион долларов, от 1 до 3 миллионов долларов и> 3 миллионов долларов.
Я пытался:
SELECT officer_ID, SUM(position_size) as AUM
FROM trades
GROUP BY client_ID
HAVING AUM > 1000000 AND AUM < 3000000;
и я получаю список всех офицеров, появляющихся несколько раз, без итогов.
Мне нужно простое:
Officer_ID | range < 1m | range 1m-3m | range > 3m
employee1, [общая сумма клиентских счетов с ценными бумагамисуммирование <итогов 1м], [общее количество клиентских счетов с суммарными ценными бумагами от 1м до 3м] и т. д. </p>
Пожалуйста, не могли бы вы указать мне правильное направление?
ОБНОВЛЕНИЕ
Я изменил предложенный Тимом код и получил желаемый результат:
SELECT
OFFICER_ID,
SUM(CASE WHEN total < 1000000 THEN total END) AS "range < 1m",
SUM(CASE WHEN total >= 1000000 AND total < 3000000 THEN total END) AS "range 1m-3m",
SUM(CASE WHEN total >= 3000000 THEN total END) AS "range > 3m"
FROM
(
SELECT OFFICER_ID, CLIENT_ID, SUM(POSITION_SIZE) AS total
FROM trades
GROUP BY OFFICER_ID, CLIENT_ID
) t
GROUP BY
OFFICER_ID;
Слишком добрый, Тим, спасибо!