only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"
Posted
技术标签:
【中文标题】only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"【英文标题】:only_full_group_by : "ORDER BY clause is not in GROUP BY clause" 【发布时间】:2018-03-23 02:11:16 【问题描述】:mysql 新版本的问题 only_full_group_by
我需要使用 Group by (col_id) 和 order by (date) 来获取表值 我在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]:语法错误或访问冲突:1055 ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“database.table.created_date” ;这与 sql_mode=only_full_group_by 不兼容
有人说解决方法吗?
提前谢谢...
【问题讨论】:
禁用 only_full_group_bymysql> set global 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';
Error related to only_full_group_by when executing a query in MySql的可能重复
GROUP BY
错误的全部意义在于它们表示逻辑错误。不可能ORDER BY created_date
,因为SELECT
子句中没有这样的表达式,并且每个组可能包含created_date
的两个或更多不同的值。哪一个用于排序?禁用sql_mode
并不能解决问题,只会让 MySQL 返回不确定的结果。
【参考方案1】:
使用“仅完整分组依据”,order by
不能是任意列。 order by
在group 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;
【讨论】:
以上是关于only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"的主要内容,如果未能解决你的问题,请参考以下文章
MySql 中与 only_full_group_by 相关的错误