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

可悲的是,我什至不知道从哪里开始...您可以使用代表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

最新更新