2017-10-11 139 views
0

发行的MySQL的新版本only_full_group_byonly_full_group_by: “ORDER BY子句是不是在GROUP BY子句”

我需要使用组由(col_id)ORDER BY(日期)表值和 和我的代码MySQL的如下:

SELECT COUNT(created_date) AS `Rows` , ANY_VALUE(id) 
FROM `table` where `my_id` = 1 AND `status` = '0' 
GROUP BY `id` 
ORDER BY `created_date` DESC 

我收到提示如下

SQLSTATE [42000]:语法错误或访问冲突:ORDER BY子句中的1055表达式#1是不是在GROUP BYç lause并包含非聚集列'database.table.created_date',它在功能上不依赖于GROUP BY子句中的列;这是不符合sql_mode = only_full_group_by

任何人说的解决方案?

在此先感谢...

+0

禁用only_full_group_by'的mysql>设置全局的sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; mysql> set session sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';' –

+0

[在MySql中执行查询时仅与\ _full \ _group \ _by相关的错误](https:// stackoverflow .com/questions/34115174/error-related-to-only-full-group-by-when-executed-a-query-in-mysql) –

+0

GROUP BY错误的要点在于它们表示逻辑错误。 “ORDER BY created_date”是不可能的,因为'SELECT'子句中没有这样的表达式,每个组可能包含两个或更多不同的'created_date'值。哪一个用于排序?禁用'sql_mode'并不能解决问题,这只会让MySQL返回不确定的结果。 – axiac

回答

0

随着“只整组”,该order by不能任意列。在,group by之后,order by被解析为,因此仅允许聚合键和聚合列。

你可以使用:

SELECT COUNT(created_date) AS `Rows`, ANY_VALUE(id) 
FROM `table` 
WHERE `my_id` = 1 AND `status` = '0' 
GROUP BY `id` 
ORDER BY ANY_VALUE(`created_date`) DESC; 

如果我猜的话,你真正想要MAX()

ORDER BY MAX(`created_date`) DESC;