Laravel原始查询,用于计算每月的结果和聚合

时间:2017-12-29 12:40:10

标签: mysql laravel laravel-5

我有以下查询

session

尽管指定月份$this->builder = (DB::table('sales') ->select(DB::raw('DATE_FORMAT(sale_date, "%M") as sale_date'), DB::raw('count(*) as sales')) ->where('sale_date', '>', $lookback->toDateTimeString()) ->orderBy('sale_date', 'asc') ->groupBy('sale_date')); 来对结果进行分组,但它只计算每个日期并将标签作为月份,所以像这样:

%M

而不是我的期望:

sale_date , sales
 August   ,  1
 August   ,  3
 August   ,  2

我在这里做错了什么,我可以选择在我从API获得结果后在javascript中对这些内容进行求和,但是我认为它不应该是正确的吗?

2 个答案:

答案 0 :(得分:3)

DATE_FORMAT(sale_date, "%M")尝试分组,您已分配名为sale_date的别名,这也是您的列的名称,因此请尝试为别名使用不同的名称,或将完整的表达式放在

$this->builder = (DB::table('sales')
        ->select(DB::raw('DATE_FORMAT(sale_date, "%M") as sale_month'), DB::raw('count(*) as sales'))
        ->where('sale_date', '>', $lookback->toDateTimeString())
        ->orderBy('sale_date', 'asc')
        ->groupBy('sale_month'));

不确定DB::raw()是否适用groupBy()

->groupBy(DB::raw('DATE_FORMAT(sale_date, "%M")'))

答案 1 :(得分:0)

另一种解决方案是:

  $this->builder = (DB::table('sales')
    ->select(DB::raw('DATE_FORMAT(sale_date, "%M") as sale_month'),
     DB::raw('sum(count) as sales'))
    ->where('sale_date', '>', $lookback->toDateTimeString())
    ->orderBy('sale_date', 'asc')
    ->groupBy('sale_month'));