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

如何通过单条SQL优化Laravel Model的订单多周期金额统计查询

Laravel 订单统计单查询优化方案

你可以通过SQL的条件聚合能力,在单次查询中完成三个时间维度的金额统计,避免三次数据库请求的开销,Laravel 实现代码如下:

use Carbon\Carbon;

$statistics = Order::where('order_status', 'Complete')
    // 先缩小查询范围:只查当月数据即可覆盖日、周、月三个统计维度,减少扫描数据量
    ->where('created_at', '>=', Carbon::now()->startOfMonth())
    ->selectRaw(
        "SUM(CASE WHEN DATE(created_at) = ? THEN total_amount ELSE 0 END) AS current_day,
        SUM(CASE WHEN created_at BETWEEN ? AND ? THEN total_amount ELSE 0 END) AS current_week,
        SUM(total_amount) AS current_month",
        [
            Carbon::today()->toDateString(),
            Carbon::now()->startOfWeek(),
            Carbon::now()->endOfWeek()
        ]
    )
    ->first();

取值方式

查询完成后直接从返回对象中获取对应统计值即可:

$currentDay = $statistics->current_day;
$currentWeek = $statistics->current_week;
$currentMonth = $statistics->current_month;

优化说明

  • 单次查询即可拿到所有结果,省去了两次额外的数据库连接、请求开销,性能提升明显
  • 前置的当月时间过滤条件,进一步减少了数据库需要扫描的行数,查询效率比原三次查询更高
  • 条件判断中加入ELSE 0逻辑,无符合条件的订单时也会返回0而非null,无需额外判空处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:54:04