2013-04-25 59 views
0

所以我查询了一个名叫golfDB数据库,它由一个名为Players的表5场:查询的sqlite3的数据库

  • 名称(玩家名)
  • totalGross(总得分之和从每轮)
  • totalRounds(轮数扮演)
  • 帕尔斯(由睫状体)
  • 小鸟的总数(由总数小鸟的)

我正在工作的功能应该按照他们的平均分数(totalGross/totalRounds)以降序排列玩家。

我并不完全确定如何去做这件事,我的代码目前将所有组件(玩家总分,总分数和总轮次)分隔到自己的列表中。我在想,我可以把总得分列表中的每个项目都划分到整个回合列表中,但是我不确定如何将这些分数返回给相应的玩家,以便他们可以订购。

我不知道是否可以这样做,所以有人有任何建议或想法?

def queryDBplayers(cursor): 
    """lists the players in order of their total gross score""" 
    cursor.execute('select name, totalGross, totalRounds from players') 
    answer= cursor.fetchall() 
    players = list() 
    for items in answer: 
     players.append(items[0]) 
    totalGrossScore = list() 
    for items in answer: 
     totalGrossScore.append(items[1]) 
    totalRoundsScore = list() 
    for items in answer: 
     totalRoundsScore.append(items[2]) 

回答

3

你让这个复杂得多,它需要的。

首先,我不明白你为什么要使用单独的列表。如果有玩家一个单独的列表,你可以用一键功能非常简单地对它们进行排序:

players.sort(key=lambda p: float(p[1])/float(p[2])) 

但是,你真的不应该在Python都这样做。做排序的最佳位置是在数据库:

SELECT name, totalGross, totalRounds ORDER BY totalGross/totalRounds 

正如你前面的问题,似乎你会从学习一些基本的SQL受益。

+0

我认为他可能需要在查询中将这些转换为十进制(+1完全相同),否则他会得到截断的整数,我怀疑这样会搞砸 – 2013-04-25 16:27:04

+0

是的,我对SQL不太了解。这是一堂课,我们应该主要是靠自己学习,但我很难理解它。我没有意识到你可以在声明中进行实际的划分。 – tinydancer9454 2013-04-25 16:27:12

0
cursor.execute('select name, totalGross, totalRounds from players') 
answer= cursor.fetchall() 

print sorted(answer,key=lambda x:float(x[1])/float(x[2])) 

我想会的工作......我不知道,但你也许能够工艺查询,以便对一个侧面解决这对你

记下它更容易分离柱像你的情况col1,col2,col3 = zip(*big_list)这将是

players,grosses,rounds = zip(*answer)