SQL中的groupby星期日期列

时间:2019-06-20 06:01:11

标签: php mysql sql

我不理解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))

2 个答案:

答案 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();