【问题标题】:MySQL: calculate weighted holdings of an ETF portfolio with the result to get one list with all holdings accumulatedMySQL:计算 ETF 投资组合的加权持股,结果得到一份包含所有持股的列表
【发布时间】:2021-04-09 10:51:26
【问题描述】:

我有一个 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!

我将不胜感激任何形式的帮助!

【问题讨论】:

  • 我们从哪里得到 20/80 的数字?
  • 这是我的 etf 权重的随机数。这些也可能是 40/60 或 10/90。

标签: mysql sql duplicates stock weighted-average


【解决方案1】:

您可以使用条件聚合来做到这一点:

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

【讨论】:

  • 刚刚注意到你已经超过 100k。恭喜!
  • 谢谢伙计。不幸的是,这对我的数据库不起作用......因为名称并不总是完全相同,这就是为什么你必须通过 ISIN 匹配它。我该怎么做这些?例如,一只 ETF 只写“Apple”,另一只写“APPLE INC”
  • @Jan 然后试试这个:dbfiddle.uk/… 但你会得到每个 ISIN 的名称之一。
  • 谢谢队友,它现在正在工作。你是个传奇!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 2014-02-03
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多