【问题标题】:Group by Query does not work in Strict ONLY_FULL_GROUP_BY SQL modeGroup by Query 在 Strict ONLY_FULL_GROUP_BY SQL 模式下不起作用
【发布时间】:2012-09-08 06:00:20
【问题描述】:

我的 group by 查询在 PHP PDO 中运行良好,但是当我在 mysql ini 中添加“sql_mode = ONLY_FULL_GROUP_BY”时,相同的查询失败并出现错误

SQLSTATE[42000]:语法错误或访问冲突:1055 'db.table.t_date' 不在 GROUP BY 中

实际查询

SELECT 
    * 
FROM 
(
    SELECT 
        DATE_FORMAT(t_date, '%b') AS mon, 
        DATE_FORMAT(t_date, '%Y-%m') AS fy_date, 
        (SUM(val1) - SUM(val2)) AS net_val 
    FROM 
        TABLE 
    GROUP BY 
        YEAR(t_date), 
        MONTH(t_date) 
    ORDER BY 
        DATE_FORMAT(t_date, '%Y-%m') DESC 
    LIMIT 12
) AS tbl 
ORDER BY 
    fy_date

有人能告诉我为什么上面的查询不能用吗

sql_mode = ONLY_FULL_GROUP_BY

【问题讨论】:

  • 没试过,但在子查询中将DATE_FORMAT(t_date, '%b')添加到group by会解决问题吗?
  • 不,没用:GROUP BYYEAR(t_date), MONTH(t_date), DATE_FORMAT(t_date, '%b')
  • 如果我没记错的话,您需要将两个 date_format 表达式添加到组中:group by DATE_FORMAT(t_date, '%b'), DATE_FORMAT(t_date, '%Y-%m') 因为需要对 所有 非聚合列进行分组。
  • 感谢“无名马”,您能否添加您的评论作为答案。我尝试了以下 GROUP BY YEAR(t_date), MONTH(t_date), DATE_FORMAT(t_date, '%b'), DATE_FORMAT(t_date, '%Y-%m') 现在在 STRICT 模式下我没有收到任何语法错误.

标签: php mysql sql pdo mysql-error-1055


【解决方案1】:

您需要将两个date_format 表达式添加到group by,因为所有非聚合列都需要分组。

SELECT 
    DATE_FORMAT(t_date, '%b') AS mon, 
    DATE_FORMAT(t_date, '%Y-%m') AS fy_date, 
    (SUM(val1) - SUM(val2)) AS net_val 
FROM 
    TABLE 
GROUP BY 
    DATE_FORMAT(t_date, '%b'), 
    DATE_FORMAT(t_date, '%Y-%m') 
ORDER BY 
    DATE_FORMAT(t_date, '%Y-%m') DESC 

【讨论】:

  • 谢谢@a_horse_with_no_name。上面的查询运行良好。
猜你喜欢
  • 2017-12-23
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2015-09-23
  • 2020-01-03
  • 1970-01-01
相关资源
最近更新 更多