我有包含以下列的数据:
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.
正如你所看到的,每个客户都有一个单独的官员负责买卖证券,但每个客户可以购买不同的证券。
除了按客户持有的证券总金额对官员进行排名(我已经这样做了),我需要通过添加客户ID持有的总证券来创建总客户账户范围,例如,总证券持有金额<100万美元,介于100万美元和300万美元之间,以及>300万美元。
我试过了:
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
officer1,客户账户的证券总额小于100万,客户账户的证券总额在100万到300万之间,等等。
请给我指个方向好吗?
更新
我修改了Tim的建议代码,并获得了所需的输出:
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;
太客气了,蒂姆,谢谢!
发布于 2018-11-27 13:53:48
我们可以尝试两次聚合,第一次是由官员和客户进行汇总,以获得客户总数,第二次是由官员单独进行汇总,以获得计数:
SELECT
OFFICER_ID,
COUNT(CASE WHEN total < 1000000 THEN 1 END) AS "range < 1m",
COUNT(CASE WHEN total >= 1000000 AND total < 3000000 THEN 1 END) AS "range 1m-3m",
COUNT(CASE WHEN total >= 3000000 THEN 1 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;
https://stackoverflow.com/questions/53493436
复制相似问题