Python Sqlite3高级分组

时间:2012-06-06 17:41:08

标签: python sql sqlite

我希望以前没有问过这个问题。我有一个包含以下列和信息的csv文件,我可以使用完全相同的列名将其上传到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文件中获得以下结果?基本上,按公司名称进行分组,仍显示类型,数量和价格,并在显示每家公司总数量的行末。

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,但没有运气。 任何帮助深表感谢 谢谢

1 个答案:

答案 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-foo的人可能能够提出一个可以产生你想要的结果的查询...但是这可能是不必要的,特别是考虑到这一点,只需稍加修改(在迭代时计算总数)在订单上),Python代码只需要O(n)时间和O(1)内存。