Python函数中的嵌入式SQL(SQLite)提供了错误的输出



我试图得到一只股票的Mcap相对于指数的Mcap之和的百分比权重。

在这个例子中,只包括七只股票。我知道SQL语句是错误的,我对此缺少一些概念性的东西。我的结果是扭曲的,我试图用不同的方式编写SQL语句,但没有成功。

也许我不得不提到,但不确定,我在这里使用的是SQLite数据库。所以,如果你能帮助我,请友善地解释一下概念方面缺少的东西。

def mcap_weight():
'''Gets the weight of the stock in relation to the Dow Jones Index
based on Mcap
- Weight is in percent'''
path = str(curr_path) + '/DowJonesInvestments.db'
connection = sqlite3.connect(path)
cursor = connection.cursor()
cursor.execute("""
SELECT MemberId, Ticker, MemberName,
(SELECT COUNT(Mcap/1000000000.0)/(Sum(Mcap/1000000000.0)))*100
FROM MarketData
LEFT JOIN DowMembers
ON MarketData.MarketDataId = DowMembers.MemberId
GROUP BY MemberId
ORDER by (MemberId);""")
results = cursor.fetchall()
cursor.close()
connection.close()
return results    

脚本结果:

[(1, 'MMM',  '3M',               0.8889056834224927),
(2, 'AXP',  'American Express', 1.1358444855147836),
(3, 'AAPL', 'Apple',            0.12735796496692525),
(4, 'BA',   'Boeing',           0.4545127533610421),
(5, 'CAT',  'Caterpillar',      1.2944838109829184),
(6, 'CVX',  'Chevron',          0.4421289423517639),
(7, 'CSCO', 'Cisco',            0.46983908340252634)]

xls的正确结果:

ID Ticker  Mcap             Percentage
1  MMM     114,830,710,459  6.66 
2  AXP     88,040,221,417   5.11
3  AAPL.O  785,188,425,600  45.54
4  BA      220,015,828,512  12.76
5  CAT     77,250,869,537   4.48
6  CVX     226,178,362,059  13.12
7  CSCO.O  212,838,828,298  12.34
Total  1,724,343,245,88

表模式:

**名称数据类型主键默认值**1.MarkedDataId Integer是Null2.实际价格为零3.Mcap Real Null4.股息实零5.日期空

市场数据表:

**MarketDataId价格Mcap股息日期**1.1 199.09 112497874482 5.411 2019-01-292.2 103.06 88040221417 1.61 2019-01-293.3 166.52 785188425600 3.07186 2019-01-294.4 387.43 220015828512 7.96029 2019-01-295.5 130.91 77250869537 3.42824 2019-01-296.6 118.37 226178362059 4.67556 2019-01-297.7 47.34 212838828298 1.38477 2019-01-29

我相信你的错误是:

COUNT(Mcap/1000000000.0)

这应该实现什么?使用Oracle数据库进行测试(可能与sqllite的行为不同),它返回的内容与Count(Mcap)相同,我也认为这不是正确的做法。我认为对于你的第四个专栏,你实际上想要这个:

Mcap/(Select Sum(Mcap) from MarketData)*100

最新更新