我有以下查询
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中对这些内容进行求和,但是我认为它不应该是正确的吗?
答案 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'));