MySql Group by 子句中的 5.7.18 错误 sql_mode=only_full_group_by

MySql 5.7.18 error in Group by clause with sql_mode=only_full_group_by

我在 Ubuntu 服务器 16.xx 上 MySql 版本 5.7.18,

我有以下查询:

 SELECT DISTINCT 
    w.sno,
    CONCAT(
      CONCAT(
       (SELECT 
          bch_lbl 
        FROM
          list_benches 
        WHERE sno = w.lb_sno),
          ' => ',
          CASE
            WHEN w.bench_cat_sno = 0 
            THEN 'All Categories' 
          ELSE 
            (SELECT 
               cat_name 
            FROM
               case_categories 
            WHERE sno = w.bench_cat_sno) 
         END,
          ' [From ',
            b.date_from,
          ' To ',
          b.date_to,
           '] '
         ),
     CASE
        WHEN b.is_active = 1 
     THEN 'Active' 
     ELSE 'Expired' 
    END
      ) AS benchLbl,
        w.is_active,
        b.j_sno 
  FROM
      working_benches w,
      bench_judges b 
  WHERE w.sno = b.b_sno 
  GROUP BY w.sno 
  ORDER BY b.is_active DESC ;

执行后,此查询return出现如下错误:

Error Code: 1055
Expression #2 of SELECT list is not in GROUP BY clause and contains 
nonaggregated column 'phc_caseflow.b.date_from' which is not functionally 
dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by

我唯一理解的是“sql_mode=only_full_group_by”,它成为上述错误的原因。

任何人都可以建议我如何更改上述查询以适应并解决问题 - 只需要编辑我的查询而不是 sql_mode:

提前致谢...

一开始我看到的问题是您在 SQL 语句中而不是在您的应用程序中格式化结果。

添加诸如“=>”和"From ["、"Active"、"Expired" 之类的内容。这种类型的格式化应该在您的应用程序中完成,而不是在您的 SQL.

我的建议是重新处理查询,删除 CONCAT(当然)和 CASE(如果可能)的使用,并使查询仅 return 您需要的原始数据。

查询正常运行并return处理原始数据后,根据需要在应用程序代码中对其进行格式化。如果这是不可能的,我怀疑您将与这个查询抗争很长时间。

查看所有日志文件和 google 问题后,我发现这是 MySql 版本次要版本中的“BIG”更新,即v 5.7.18。所以,我找到的解决方案是执行以下快捷方式:

sudo nano /etc/mysql/my.cnf
Add this to the end of the file

[mysqld]  
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

我的查询 运行 在服务器上非常好,我的意思是在我的生产服务器上...