ORM 查询中可以利用聚合函数的结果再次作为筛选条件
在sql 查询中,有时候我们即需要一些聚合函数的结果,同时也需要这个结果作为筛选过滤的条件,那么就可以合理利用group_by和having函数,将query中的需要通过聚合函数(如sum, count 等)得到的结果再次作为条件放置于having 里。
例如,需要查询当前用户的所有商品总价加起来大于0的全部订单及商品总价,这时候就可以依据聚合函数的结果作为条件进行进一步筛选;
query_set = self.session.query(models.Order,
func.sum(models.OrderGoods.money)) \
.join(models.OrderGoods, models.OrderGoods.order_id == models.Order.id )
.filter(models.Order.customer_id == self.current_user.id) \
.group_by(models.Order.id) \
.having(func.sum(models.OrderGoods.money) > 0) 、
.order_by(models.Order.id.desc()) \
.all()
需要注意的是不能单独用having, 需要先进行group_by 函数,关于having于where的用法区别可进行百度,