【问题标题】:how to find sum of group and find weight in mysql?如何在mysql中找到组的总和并找到权重?
【发布时间】:2014-05-18 17:56:44
【问题描述】:

我有一张公司表,结构如下:

 +------------+--------------+-----------+--------+-----------------------------+
 | ticker     | total_shares | institute | public | sector                      |
 +------------+--------------+-----------+--------+-----------------------------+
 | 1JANATAMF  |    200000000 |     30.00 |  45.00 | Mutual Funds                |
 | 8THICB     |      5000000 |      0.00 |   0.00 | Mutual Funds                |
 | AAMRATECH  |     55369395 |     28.00 |  42.00 | IT Sector                   |
 | ABB1STMF   |    162615643 |     46.44 |  33.56 | Mutual Funds                |
 | ABBANK     |    532459152 |     54.86 |  30.01 | Bank                        |
 | ACI        |     28661768 |     37.73 |  28.23 | Pharmaceuticals & Chemicals |
 | ACIFORMULA |     45000000 |     22.77 |  11.21 | Pharmaceuticals & Chemicals |
 | ACIZCBOND  |       267170 |     60.00 |  40.00 | Corporate Bond              |
 | ACTIVEFINE |     69000000 |     20.80 |  64.42 | Pharmaceuticals & Chemicals |
 | AFCAGRO    |     50000000 |     48.11 |  21.60 | Pharmaceuticals & Chemicals |
 | AFTABAUTO  |     95732422 |     47.49 |  22.01 | Engineering                 |
 | AGNISYSL   |     51798982 |     16.33 |  70.92 | IT Sector                   |
 | AGRANINS   |     24157650 |     18.30 |  43.05 | Insurance                   |
 | AIBL1STIMF |    100000000 |     76.31 |  13.69 | Mutual Funds                |
 | AIMS1STMF  |     41450000 |      0.00 |   0.00 | Mutual Funds                |
 | AL-HAJTEX  |     12691843 |      4.19 |  71.76 | Textile                     |
 | ALARABANK  |    946958501 |     10.07 |  46.88 | Bank                        |
 +------------+--------------+-----------+--------+-----------------------------+

另一个价格表:

 +------------+--------+--------+------------+
 | ticker     | open   | high   | price_date |
 +------------+--------+--------+------------+
 | AAMRATECH  |  29.80 |  30.20 | 2014-05-04 |
 | ABBANK     |  27.50 |  27.50 | 2014-05-04 |
 | ACI        | 235.00 | 244.50 | 2014-05-04 |
 | ACIFORMULA |  86.00 |  87.60 | 2014-05-04 |
 | ACTIVEFINE |  69.00 |  70.00 | 2014-05-04 |
 | BANGAS     | 509.50 | 509.50 | 2014-05-04 |
 | BANKASIA   |  18.00 |  18.40 | 2014-05-04 |
 +------------+--------+--------+------------+

当然数据是为了某种目的而被短路的。现在我想找到开盘的加权价格。这个公式是

A = open*((total_share*(institue/100)+(total_share*(public/100))

它们按部门的 A 总和,例如所有股票代码属于共同基金的总和。然后除以单个股票代码,例如 1JANATAMF/共同基金的总和以找到权重。

我用过这个查询:

select c.ticker, 
p.open*(c.total_shares*(c.institute/100)+c.total_shares*(c.public/100)) as cap
from company as c
left join price as p
on p.ticker =c.ticker
where p.price_date = '2014-05-04';

但找不到按扇区求和并找到权重的方法。

编辑:
输出会像
股票代码,A/(按部门分组的 A 的总和) 其中,A是根据ticker制定的值

输出如下:

 +------------+--------------+--------------+
 | ticker     | sum(a)       | weight       |
 +------------+--------------+--------------+
 | 1JANATAMF  |   5700000000 |    150078540 |

【问题讨论】:

  • 您的权重计算有点困惑,即(1JANATAMF)字符串值如何被扇区总和等数值整除,您能清除它吗?
  • 您误解了我从上述查询或 A 获得的数字结果。例如 1JANATAMF 的 A 说 50 并且它属于共同基金,共同基金领域还有许多其他公司,例如 1JANATAMF,我想要按扇区计算所有 A 的总和,然后通过这种方式计算权重 A/该扇区的总和。
  • 请编辑您的问题并为给定数据提供您想要的结果。
  • 编辑并提供了清晰的输出

标签: mysql sql group-by sum


【解决方案1】:

在某些视图中中断您的查询,看看它是否是您在 SQLFiddle http://sqlfiddle.com/#!2/7b4cb/4/2 中找到的内容

【讨论】:

  • 您好,非常感谢您的帮助,我快到了,但是最后一步卡住了您能告诉我如何获得每个扇区的重量总和吗?例如,根据您的结果,我需要 (0.452644163162+0.133979939858+0.413375896979) 求和并显示扇区名称不需要代码,因为我需要每个扇区的总重量。我可以将重量与价格表中的开盘价相乘吗?像这样? select lc.sector, p.open*(cap/sum_cap) as open from list_cap lc join list_sum_cap lsc on lsc.sector = lc.sector join price as p on lc.ticker =p.ticker;谢谢
  • 另一个问题是,如果我创建视图 where p.price_date = '2014-05-04' 并且需要更改日期,我是否需要每次都创建视图?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
相关资源
最近更新 更多