2011-11-17 112 views
0

我有一張表(foos),它是一個Foos列表,每行每個Foo一行。第二個表(項目)是一個列表,其中每一行是Foo的類型和金額(以及其他信息)。例如,Foo3,45.2和Foo2,12.34。python sqlite3總結每種類型

我想確定每種類型Foo的總金額。

這是我現有的代碼,但必須有一個更好的(更標準的或有效的)方式:

cursor.execute('''select type from foos''') 
foo_types = cursor.fetchall() 
results = [] 
for ft in foo_types: 
    cursor.execute('''select sum(amount) from items 
     where foo_type =?''', ft) 
    results.append((ft, cursor.fetchone())) 

我應該如何編寫代碼呢?

+1

SO的語法高亮告訴我有一個與你的代碼有問題。 – eumiro

+0

我在執行行的末尾加了一個'''。固定。 – foosion

回答

2
SELECT foo_type, SUM(amount) 
FROM items 
GROUP BY foo_type 

給你一個已經查詢每個foo_type和相應的sum內。您可以從中建立一個字典,並使用它來擴展第一個查詢中的數據。

或者把一切都變成一個查詢:

cursor.execute("SELECT foo_type, SUM(amount) " 
       "FROM items, foos " 
       "WHERE items.foo_type = foos.type " 
       "GROUP BY foo_type") 
results = list(cursor) 

# results is a list of tuples: [(type1, sum1), (type2, sum2), ...] 
+0

items和foo都使用列名'type'。當我運行第二個版本時,我得到:sqlite3.OperationalError:模棱兩可的列名:按行逐個鍵入。我嘗試了group.type,但沒有幫助。第一個版本完美運行 – foosion