更新到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"
可能更明智。答案 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;
这会保留单行并将聚合值添加到它们中。