我已更新我的wampserver(X64)3.0.6并使用php安装Mysql 5.7.14以用于我正在处理的Web应用程序。当在旧版本的MySql 5.6.17中运行时,它可以正常工作。但是自从升级到5.7.14后,我收到了这个错误:
SELECT列表的表达式#1不在GROUP BY子句中并且包含 非聚集列'pharmezy-2.p.idproduct'不是 功能上依赖于GROUP BY子句中的列;这是 与sql_mode = only_full_group_by
不兼容
我的查询是:
SELECT p.idproduct, p.idproduct, p.product_name, pi.image_url, u.u_company,
p.product_rating FROM product p join product_image pi on p.idproduct=pi.idproduct
join users u on p.idusers = u.idusers where p.idprocess=1 and p.product_status=1
group by u.u_company
Thanku
答案 0 :(得分:0)
因为你似乎遇到了麻烦我写了这个答案。
您需要对要汇总的列使用聚合函数,例如MAX()
或COUNT()
。或者您记下要分组的所有列。就像你对u.u_company
所做的那样。这也可以使用SELECT DISTINCT
。
例如,使用聚合函数MAX()
并仅按u.u_company
进行分组:
SELECT MAX(p.idproduct) AS MAX_p_idproduct ,
MAX(p.product_name) AS MAX_p_product_name ,
MAX(pi.image_url) AS MAX_pi_image_url ,
u.u_company ,
MAX(p.product_rating) AS MAX_p_product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
GROUP BY u.u_company
不使用聚合函数,而是按所有列分组:
SELECT p.idproduct ,
p.product_name ,
pi.image_url ,
u.u_company ,
p.product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
GROUP BY u.u_company ,
p.idproduct ,
p.product_name ,
pi.image_url ,
u.u_company ,
p.product_rating
与使用DISTINCT
而非GROUP BY
的上一个查询相同但不同:
SELECT DISTINCT p.idproduct ,
p.product_name ,
pi.image_url ,
u.u_company ,
p.product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
也可以使用Aggregation-Funtion(与第一个查询相同):
SELECT DISTINCT MAX(p.idproduct) AS MAX_p_idproduct ,
MAX(p.product_name) AS MAX_p_product_name ,
MAX(pi.image_url) AS MAX_pi_image_url ,
u.u_company ,
MAX(p.product_rating) AS MAX_p_product_rating
FROM product p
JOIN product_image pi ON p.idproduct = pi.idproduct
JOIN users u ON p.idusers = u.idusers
WHERE p.idprocess = 1
AND p.product_status = 1
但是在所有情况下你都需要知道你要做什么。您是否只想按u.u_company
进行分组,还是希望按更多列分组?但无论哪种方式,所有列都涉及分组。他们需要通过聚合功能进入群组或聚合!