【问题标题】:only_full_group_by : "ORDER BY clause is not in GROUP BY clause"only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"
【发布时间】: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_by mysql> 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';
  • GROUP BY 错误的全部意义在于它们表示逻辑错误。不可能ORDER BY created_date,因为SELECT 子句中没有这样的表达式,并且每个组可能包含created_date 的两个或更多不同的值。哪一个用于排序?禁用sql_mode 并不能解决问题,只会让 MySQL 返回不确定的结果。

标签: php mysql phpmyadmin mysql-error-1055


【解决方案1】:

使用“仅完整分组依据”,order by 不能是任意列。 order bygroup 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 2014-08-28
    • 2011-09-07
    • 2017-06-22
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多