gpt4 book ai didi

python - SQLAlchemy:聚合后如何过滤

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:48 24 4
gpt4 key购买 nike

如何过滤掉总份额为 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) misuse ofaggregate: sum() ...

解决方法是删除过滤器并使用列表理解:

result = [x for x in g.all() if x[1] != 0.0]

但与过滤 SQL 查询相比,这非常慢,因为它会将所有数据加载到内存中,而不是仅加载过滤后的数据。

(编辑以简化。)

最佳答案

好的,答案是使用having() .参见 related .

q = session.query(Trades.ticker, func.sum(Trades.shares))
g = q.group_by(Trades.ticker)
f = g.having(func.sum(Trades.shares) != 0)
result = f.all()

漂亮、简单、快速。

写出问题有助于我更清楚地思考问题,并帮助我在文档中找到答案。我把它留在这里以防它对某人有帮助。

(编辑以反射(reflect)修改后的问题。)

关于python - SQLAlchemy:聚合后如何过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com