SQLAlchemy:内部分组依据不同

时间:2019-09-05 03:10:40

标签: python postgresql group-by sqlalchemy distinct

我想在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。

1 个答案:

答案 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而不是通用类型。