mysql error“error 3029(hy000):order by的表达式#1包含聚合函数并应用于非聚合查询的结果”

bxpogfeg  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(2517)

我正在执行下面的查询

SELECT DISTINCT n.nid AS entity_id
FROM node n
INNER JOIN og_membership om ON n.nid=om.etid AND om.entity_type='node'
INNER JOIN foster_animal_capacity fc ON n.nid=fc.person_id
LEFT OUTER JOIN field_data_field_attributes fa ON n.nid=fa.entity_id
LEFT OUTER JOIN foster_person_black_outs fb ON n.nid=fb.person_id
WHERE -- n.nid = 1441663 AND 
(om.gid = 464) AND (fc.animal_type_id = 3) 
AND ((fc.capacity - fc.occupied)>=1) 
AND ((fb.start_date IS NULL) OR (fb.end_date < 1523577600) OR (fb.start_date > 1522540800))
AND ((SELECT pid FROM `animal_history` WHERE `TYPE` = 'Foster Return'   
AND pid = n.nid ORDER BY DATE_FORMAT(FROM_UNIXTIME( UNIX_TIMESTAMP( ) - MAX( CAST(`time` AS UNSIGNED) ) ) ,'%e')));

查询在中完全执行 MySql 5.5.5 但显示以下错误 MySql 5.7.21 ```
ERROR 3029 (HY000): Expression #1 of ORDER BY contains aggregate function and applies to the result of a non-aggregated query

为什么会这样?我怎样才能克服这个问题呢?
我找不到有关错误代码3029的任何文档
nhn9ugyo

nhn9ugyo1#

正如mysql文档中提到的:mysql 5.7.5及更高版本实现了函数依赖性的检测。如果启用了only\ full\ group\ by sql模式(默认情况下是这样),mysql将拒绝select list、having condition或order by list引用的未聚合列,这些列既不在groupby子句中命名,也不在功能上依赖于它们(在5.7.5版本之前,mysql没有检测到函数依赖,默认情况下只启用\u full \u group \u by。有关5.7.5之前的行为的描述,请参见mysql 5.6
有关详细信息,请查看:mysql group-by处理

相关问题