Laravel错误:1140组列混合(最小(),最大(),计数())
熟悉此Laravel错误的任何人: “SQLSTATE[42000]:语法错误或访问冲突:1140如果没有GROUP BY子句(SQL:select office,avg(q1)为q1,avg(q2)为q2,则将组列(MIN(),MAX(),COUNT(),…)与无组列混合是非法的。” 这是我的控制器代码:Laravel错误:1140组列混合(最小(),最大(),计数()),laravel,Laravel,熟悉此Laravel错误的任何人: “SQLSTATE[42000]:语法错误或访问冲突:1140如果没有GROUP BY子句(SQL:select office,avg(q1)为q1,avg(q2)为q2,则将组列(MIN(),MAX(),COUNT(),…)与无组列混合是非法的。” 这是我的控制器代码: $feedback_data = DB::table('feedback') ->select(DB::raw('office, avg(q1) as q1, avg(q2)
$feedback_data = DB::table('feedback')
->select(DB::raw('office, avg(q1) as q1, avg(q2) as q2'))
->get();
return view('/feedback/index')->with('feedback_data', $feedback_data);
您必须使用
groupBy()
:
$feedback\u data=DB::table('feedback')
->选择(DB::raw('office,平均值(q1)为q1,平均值(q2)为q2'))
->groupBy(“办公室”)
->get();
在使用MIN()、MAX()、COUNT()AVG()
等agregate函数时,您必须使用groupby
,但根据最新的MYSQL
版本,您必须将select查询中的所有列作为groupby
使用
因此,解决此错误有两种方法:
分组依据。
config/database.php
中将严格模式设置为false
groupby
已显示在此处给出的一个答案中,因此我们将讨论严格模式,因此laravel的严格模式默认为true
,这不允许在单列上分组,因此如果希望在单列上分组,则必须将严格模式设置为false
禁用“严格”模式,返回到是否要获取每个
office
的平均值?q1、q2、q3、Q4的平均值所有行的平均值?或每个office
的平均值?我要每个office的平均值。您需要在查询中添加一个groupbyoffice
子句。这回答了我的问题。谢谢!!
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => false, //it will be true by default set this to false
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],