在更新到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“。
发布于 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
发布于 2018-06-08 06:20:09
您正在寻找的是从MySQL 8.0开始提供的COUNT OVER
:
SELECT
tblslideshow.slideImage,
COUNT(*) OVER () AS countVal
FROM
tblslideshow
WHERE
tblslideshow.parentID = 3424;
这将保留单行,并将聚合值添加到这些行。
https://stackoverflow.com/questions/50750710
复制相似问题