如何解决MySQL:计算 ETF 投资组合的加权持有量,结果得到一个累积所有持有量的列表
我有一个 MySQL 表,其中包含大约 900 个不同 ETF 持有的条目。下面是一个例子:
ID ETF Name Stock Name Weighting ISIN
1 iShares Automation & Robotics XIAOMI CORP 3.45 KYG9830T1067
24 iShares Automation & Robotics SNAP INC CLASS A 3.37 US83304A1060
42 iShares Automation & Robotics APPLE INC 2.14 US0378331005
51 iShares MSCI World Information Technology APPLE INC 20.14 US0378331005
53 iShares MSCI World Information Technology MICROSOFT CORP 14.04 US5949181045
我现在的目标是设置 ETF 权重,例如 ETF iShares Automation & Robotics 20% 和 ETF iShares MSCI World Information Technology 80%。 SQL 查询现在应该做的是根据 20/80 ETF 多样化计算加权持有量。
例如,对于名为 Apple
的股票,结果将是:0.2 * 2.14 + 0.8 * 20.14 = 16.54
。最后,我想要一张表格,它删除所有重复项(按 ISIN),并给我一张表格,其中包含按权重排序的计算权重。
这是预期的输出(20/80):
Stock Name Weighting ISIN
APPLE INC 16.54 US0378331005
MICROSOFT CORP 11.232 US5949181045
XIAOMI CORP 0.69 KYG9830T1067
SNAP INC CLASS A 0.674 US83304A1060
遗憾的是,我什至不知道从哪里开始...您可以使用 ISIN
来匹配股票,它代表 International Securities Identification Number
并且是唯一的股票 ID!
我将不胜感激!
解决方法
您可以使用条件聚合来实现:
SELECT `Stock Name`,ROUND(SUM(CASE
WHEN `ETF Name` = 'iShares Automation & Robotics' THEN 0.2
WHEN `ETF Name` = 'iShares MSCI World Information Technology' THEN 0.8
END * Weighting
),3) Weighting,ISIN
FROM tablename
GROUP BY `Stock Name`,ISIN
参见demo。
结果:
> Stock Name | Weighting | ISIN
> :--------------- | --------: | :-----------
> APPLE INC | 16.540 | US0378331005
> MICROSOFT CORP | 11.232 | US5949181045
> SNAP INC CLASS A | 0.674 | US83304A1060
> XIAOMI CORP | 0.690 | KYG9830T1067
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。