我有一个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
可悲的是,我什至不知道从哪里开始...您可以使用代表International Securities Identification Number
并且是唯一股票 ID 的ISIN
来匹配股票!
我将不胜感激任何帮助!
你可以用条件聚合来做到这一点:
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
请参阅演示。
结果:
> 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