Laravel错误:1140组列混合(最小(),最大(),计数())

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)

熟悉此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) 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'),
            ]) : [],
        ],