我有以下查询
$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
而不是我期望的:
sale_date , sales
August , 6
我在这里做错了什么,一旦我从API中得到结果,我确实可以选择在javascript中对它们进行求和,但我认为它不应该是正确的吗?
通过DATE_FORMAT(sale_date, "%M")
尝试组,您已经分配了名为sale_date
的别名,它也是您的列的名称,因此请尝试为别名使用不同的名称或将完整表达式放入group by
$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")'))
另一个解决方案是:
$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'));