【发布时间】:2017-11-21 17:12:55
【问题描述】:
如何过滤掉总份额为 0 的所有组?
q = session.query(Trades.ticker, func.sum(Trades.shares))
g = q.group_by(Trades.ticker)
f = g.filter(func.sum(Trades.shares) != 0)
result = f.all()
这会在第 3 行引发错误:
... sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) 误用 聚合:sum() ...
解决方法是删除过滤器并使用列表推导:
result = [x for x in g.all() if x[1] != 0.0]
但这与过滤 SQL 查询相比非常慢,因为它会将所有数据加载到内存中,而不是仅加载过滤后的数据。
(已编辑以简化。)
【问题讨论】:
标签: python sqlalchemy