MySQL:计算一个ETF投资组合的加权持有量,结果得到一个包含所有累积持有量的列表
MySQL: calculate weighted holdings of an ETF portfolio with the result to get one list with all holdings accumulated
我有一个 MySQL table,其中包含大约 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
。最后,我想要一个 table 删除所有重复项(通过 ISIN)并给我一个 table 计算权重按权重排序。
这是预期的输出(对于 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
我有一个 MySQL table,其中包含大约 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
。最后,我想要一个 table 删除所有重复项(通过 ISIN)并给我一个 table 计算权重按权重排序。
这是预期的输出(对于 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