2012-06-06 22 views
0

我希望這個問題還沒有問過。我有一個包含列和信息下方的CSV文件,我可以用完全相同的列名Python的SQLITE3先進的分組

Company Type Qty Price 
ABC  r 5 $$$ 
ABC  h 9 $$$ 
ABC  s 10 $$$ 
DER  a 3 $$$ 
DER  z 6 $$$ 
GGG  q 12 $$$ 
GGG  w 20 $$$ 

但是,我如何才能在一個CSV文件如下的結果上傳這sqlite3的數據庫?基本上,按公司名稱進行分組,並仍顯示類型,數量和價格,並在行末顯示每家公司的總數。

Company Type Qty Price Total Qty 
ABC  r 5 $$$  
     h 9 $$$ 
     s 10 $$$  24 
DER  a 3 $$$ 
     z 6 $$$  9 
GGG  q 12 $$$ 
     w 20 $$$  32 

我一直在嘗試與GROUP BY,但沒有運氣。 任何幫助非常感謝 謝謝

+0

也許你可以做到這一點與SQL表達式包括'UNION'.But你爲什麼不以兩個表達式分開處理:首先是選擇和訂購數據,第二個是和總和從事羣體。如果你發佈代碼來創建和填充分貝,我可以幫助你進一步。 – schlamar

+0

我將做到這一點,讓你知道 –

回答

3

我會做這個使用SQL和itertools.groupby的組合。

例如,像:

results = cxn.execute("SELECT * FROM orders ORDER BY Company") 
for company, orders_iter in itertools.groupby(results, key=lambda r: r[0]): 
    orders = list(orders_iter) 
    total_qty = sum(order[2] for order in orders) 
    ... print out orders ... 

有人與更多的SQL-富比我也許能想出這將產生正是你想要的結果的查詢......但是,這可能是不必要的,特別是考慮到,有一些小的修改(計算總在遍歷訂單)中,Python代碼將只需要O(n)時間和O(1)內存。

+0

謝謝,這似乎是工作。我會玩這個。 –

+0

而不是創建訂單的列表,你可以用'itertools.tee'重複迭代。 – schlamar

+0

非常感謝。這是真棒東西 –