2013-04-25 26 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)