我不理解laravel中的group by子句 查询:
DB::table('ipaddress')->select('date', DB::raw('count(id) as total'))
->where('date','>=','now()-interval 6 week')
->groupBy(DB::raw("WEEK(`date`)"))
->get();
错误:SQLSTATE [42000]:语法错误或访问冲突:1055'kitchen_portal.ipaddress.date'不在GROUP BY中(SQL:选择
date
,count {id)作为{{1 }},其中ipaddress
> = now()-间隔6周,按WEEK(date
))
答案 0 :(得分:1)
应该是下面的样子。有应用GROUP BY的规则。您只能选择在GROUP BY子句中汇总或添加的列。在此处,您可以在GROUP BY中添加WEEK名称,但直接在选择中选择日期即可。
DB::table('ipaddress')->select(DB::raw("WEEK(`date`)"), DB::raw('count(id) as total'))
->where('date','>=','now()-interval 6 week')
->groupBy(DB::raw("WEEK(`date`)"))
->get();
答案 1 :(得分:0)
由于您使用的是GROUP BY WEEK(date)
,因此您需要在select语句中将其与聚合函数COUNT()
一起使用。
选择的内容绝不能超过GROUP BY
(这里是WEEK(date)
),以及诸如COUNT()
,SUM()
,MAX()
和以此类推。在select语句中引入其他值可以使结果集返回一些奇怪的组合。
DB::table('ipaddress')->select(DB::raw('WEEK(date) as WeekNo'), DB::raw('COUNT(id) as total'))
->where('date', '>=', 'NOW() - INTERVAL 6 WEEK')
->groupBy(DB::raw("WEEK(`date`)"))
->get();