我正在使用Laravel为管理员信息中心构建一些分析统计图表。我有很多乐趣。虽然我很难理解如何利用SQL查询和GroupBy函数来实现一些东西。
结束目标:检索已创建的用户的计数,并在他们注册的那一周 groupBy 。
到目前为止,我使用了这个:
DB::table("users")
->select(DB::raw("COUNT(*) as count"))
->orderBy("created_at")
->groupBy(function ($query)
{
return \Carbon\Carbon::parse($query->created_at)->format("W");
})
->get();
我在Tinker中遇到错误(这是我执行大部分测试的地方,此时它是这样的:
PHP warning: strtolower() expects parameter 1 to be string, object given in
/Users/Ian/sites/bangerz-army/vendor/laravel/framework/src/Illuminate/Database/Grammar.php on line 58
我在PHP中遇到了类似的查询,但出于性能原因,我希望尽可能多地保留SQL中的数学。
/ Laravel 5.5
答案 0 :(得分:1)
尝试使用
组中的DB::raw()
DB::table("users")
->select(DB::raw("COUNT(*) as count, WEEK(created_at)"))
->orderBy(DB::raw('WEEK(created_at)'))
->groupBy(DB::raw('WEEK(created_at)'))
->get();
答案 1 :(得分:0)
尝试以下方法:
DB::table('users')
->select('WEEK(created_at, 1) AS week, COUNT(*) AS count')
->groupBy('week')
->orderBy('week', 'ASC')
->get();
请注意mode
SQL函数中使用的WEEK
选项。这表示每个新周开始的一周中的哪一天。在我的例子中,我已经去了星期一,但你可以找到其他选项here