我想在group_by查询中使用不同的内容,例如:
session.query(Product.attribute_x, func.min(Product.price), distinct(Product.color)). group_by(Product.attribute_x)
也就是说,对于attribute_x的每个值,我想找到最低的价格和所有可用的颜色。
我似乎无法在SQLAlchemy中以这种方式使用distinct。有人可以建议一种有效的方法来为attribute_x的每个值标识不同的颜色(而无需为attribute_x的每个值创建新的查询)吗?
我在PostgreSQL上使用SQLALchemy 1.3.4。
答案 0 :(得分:1)
使用array_agg
:
from sqlalchemy.dialects.postgresql import array_agg
session.query(Product.attribute_x,
func.min(Product.price),
array_agg(distinct(Product.color))).\
group_by(Product.attribute_x)
在这种情况下,func.array_agg()
也可以工作。如果要使用任何数组运算符等,则Postgresql方言的特定形式仅确保将返回类型理解为Postgresql ARRAY
而不是通用类型。