首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL 5.7 -错误sql_mode=only_full_group_by

MySQL 5.7 -错误sql_mode=only_full_group_by
EN

Stack Overflow用户
提问于 2018-06-08 05:57:45
回答 2查看 961关注 0票数 0

在更新到MySQL 5.7.11之后,我们得到了一些与sql_mode相关的错误,包括only_full_group_by。

研究表明,我们可以将其关闭,但最好知道如何使用结构合理的SQL语句来实现预期目标。

错误:

#1140 -在没有GROUP BY的聚合查询中,选择列表的表达式#1包含非聚合列‘tbllideshow.slideImage’;这与sql_mode=only_full_group_by不兼容

查询:

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

目标是返回值的列表,同时还返回所有返回记录的计数。在不更改MySQL my.ini的情况下实现此目标的最佳方法是什么?为什么它是一个Group By错误,因为我们甚至没有分组?或者分组是正确解决方案的一部分?

预期结果应为:

slideImage        |      countVal

Image1.jpg        |      3

Image2.jpg        |      3 

Image3.jpg        |      3 

编辑:由于我们使用的是PHP和MySQLi,所以更明智的做法是排除Count(),只使用"mysqli_num_rows“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-08 05:59:35

使用聚合函数时,需要在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
EN

Stack Overflow用户

发布于 2018-06-08 06:20:09

您正在寻找的是从MySQL 8.0开始提供的COUNT OVER

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

这将保留单行,并将聚合值添加到这些行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档