如何使用Arel表将自定义统计结果按降序排列
按预订数量降序排列的Arel查询修改方案
要实现统计结果按预订数量降序排列,只需在原查询的链式调用末尾添加排序逻辑即可。推荐使用Arel原生语法构建排序条件,保持代码一致性同时避免SQL注入风险。
修改后的完整代码
Product.joins( Product.arel_table.join(Reservation.arel_table, Arel::Nodes::OuterJoin).on( Reservation.arel_table[:product_id].eq(Product.arel_table[:id]) ).join_sources ).group(Product.arel_table[:id]) .select(Product.arel_table[Arel.star], Reservation.arel_table[:id].count.as('res_count')) .order(Reservation.arel_table[:id].count.desc) # 新增的降序排序逻辑
替代方案(使用别名排序)
如果更习惯用查询中定义的res_count别名排序,也可以这样写:
.order(Arel.sql('res_count DESC'))
前者通过Arel API构建排序条件,能适配不同数据库的语法差异,是更推荐的写法;后者写法更简洁,但需要确保别名res_count在查询中已正确定义。
内容的提问来源于stack exchange,提问作者Gotey
相关产品推荐
相关产品推荐

