案例:
统计用户信息并可以按照用户订单数量进行排序。
一般情况下我们不会将用户订单数量单独保存,这种情况下,我们没法直接用order_by('订单数量')进行排序,因为订单数量要我们根据用户id等标识查询得出,此时就要用到联合查询。
这种情况用原生sql语句查询还是相对简单的,ORM查询的话要麻烦一点,容易出错。
示例:
子查询
order_info = (
db.session.query(Orders.userid,
func.count(Orders.id).label('order_count'))
.filter(
“查询条件”
)
.group_by(Orders.userid)
.subquery()
)
根据子查询条件进行排序
user_info = (
db.session.query(
Users.userid,
order_info.c.order_count
)
.outerjoin(
order_info,
Users.userid == order_info.c.userid
)
.filter(
"查询条件"
)
.order_by(asc(order_info.c.order_count)) # 订单数量升序,降序desc
.limit(page_size)
.offset((page - 1) * page_size) # 分页
.all()
)
这样就可以对用户信息按照订单数量进行排序,分页查询。
网友评论