You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何对多个withCount结果求和并按该值排序

多withCount结果求和排序实现方案

完全可以通过Eloquent查询构造器实现该需求,以下是两种常用实现方式:

  • 第一种:直接排序,性能最优
    无需额外查询字段,直接对withCount生成的统计字段求和排序即可:
$q->withCount(['ordered', 'favorites'])
  ->orderByRaw('(ordered_count + favorites_count) DESC')
  ->get();

withCount生成的ordered_count、favorites_count属于SQL查询层面的临时字段,可直接参与运算,该写法不会产生额外的查询开销。

  • 第二种:同时获取求和结果,方便后续使用
    如果你需要在返回的模型实例中直接拿到求和后的总数值,可以额外定义别名查询:
$q->withCount(['ordered', 'favorites'])
  ->selectRaw('*, (ordered_count + favorites_count) as total_interaction')
  ->orderBy('total_interaction', 'DESC')
  ->get();

执行完成后可以直接通过模型的total_interaction属性获取两个统计值的和。

异常兼容处理

如果你的数据库环境中无关联数据时统计字段会返回NULL而非0,可以用COALESCE函数做兼容,避免求和结果为NULL:

$q->withCount(['ordered', 'favorites'])
  ->orderByRaw('(COALESCE(ordered_count, 0) + COALESCE(favorites_count, 0)) DESC')
  ->get();

内容的提问来源于stack exchange,提问作者Ashok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:36:04