Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Group by Query不能在严格的纯SQL模式下工作_Php_Mysql_Sql_Pdo_Mysql Error 1055 - Fatal编程技术网

Php Group by Query不能在严格的纯SQL模式下工作

Php Group by Query不能在严格的纯SQL模式下工作,php,mysql,sql,pdo,mysql-error-1055,Php,Mysql,Sql,Pdo,Mysql Error 1055,我有一个GROUPBY查询,它在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_FORMA

我有一个GROUPBY查询,它在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\u格式
表达式添加到
groupby
中,因为所有非聚合列都需要分组

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 

没有尝试过这一点,但是在子查询中将
DATE\u格式(t\u DATE,'%b')
添加到
groupby
可以解决问题吗?没有,没有起作用:按年分组(t\u DATE)、按月分组(t\u DATE)、按日期分组(t\u DATE,'%b')。如果我没有弄错的话,您需要将
DATE\u格式
表达式添加到组中:
groupby DATE\u格式(t_date,'%b')、date_格式(t_date,'%Y-%m')
因为所有非聚合列都需要分组。感谢“无名马”,您可以添加您的评论作为答案。我尝试了以下分组,按年(t_date)、月(t_date)、日期(t_date,'%b')、日期(t_date,'%Y-%m'))现在我在严格模式下没有收到任何语法错误。谢谢@a_horse_和_no_name。上面的查询非常有效。