MySQL 5.7 - 错误sql_mode = only_full_group_by

时间:2018-06-07 21:57:45

标签: mysql

更新到MySQL 5.7.11之后,我们收到了许多与sql_mode相关的错误,包括only_full_group_by。

研究显示我们可以关闭它,但知道如何使用结构合理的SQL语句实现预期目标可能会更好。

错误:

  

#1140 - 在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列< tblslideshow.slideImage&#39 ;;这与sql_mode = only_full_group_by

不兼容

查询:

SELECT
   tblslideshow.slideImage,
   COUNT(tblslideshow.slideID) AS countVal
FROM
  tblslideshow
WHERE
  tblslideshow.parentID = 3424

目标是返回值列表,但也返回所有返回记录的Count。 无需更改MySQL my.ini即可实现此目标的最佳方法是什么?为什么它是Group By错误我们甚至不分组?或者正在分组正确解决方案的一部分?

预期结果应为:

slideImage        |      countVal

Image1.jpg        |      3

Image2.jpg        |      3 

Image3.jpg        |      3 

编辑:由于我们使用的是PHP和MySQLi,因此排除Count()并使用" mysqli_num_rows"

可能更明智。

2 个答案:

答案 0 :(得分:1)

使用聚合函数时,需要在Group by子句中添加非聚合列。

SELECT
   tblslideshow.slideImage,
   COUNT(tblslideshow.slideID) AS countVal
FROM
  tblslideshow
WHERE
  tblslideshow.parentID = 3424
Group by tblslideshow.slideImage

修改

您可以尝试在select

上使用子查询
SELECT t.slideImage,
(
    SELECT
       COUNT(tblslideshow.slideID) AS countVal
    FROM
      tblslideshow
    WHERE
      tblslideshow.parentID = 3424
) countVal
FROM tblslideshow t
WHERE t.parentID = 3424

答案 1 :(得分:0)

您正在寻找的是COUNT OVER,自MySQL 8.0起可用:

SELECT
   tblslideshow.slideImage,
   COUNT(*) OVER () AS countVal
FROM
  tblslideshow
WHERE
  tblslideshow.parentID = 3424;

这会保留单行并将聚合值添加到它们中。