2012-09-15 22 views
1

我通過查詢有一羣其中在PHP PDO工作正常工作,但是當我在MySQL INI添加「的sql_mode = ONLY_FULL_GROUP_BY」,相同的查詢失敗,錯誤GROUP BY查詢不嚴格ONLY_FULL_GROUP_BY SQL模式

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 
+0

未嘗試此操作,但會在子查詢中爲'group by'添加'DATE_FORMAT(t_date,'%b')'解決問題? – Fluffeh

+0

沒有,沒有工作:GROUP BY YEAR(t_date),MONTH(t_date),DATE_FORMAT(t_date,'%b') – Sumedh

+1

如果我沒有弄錯,你需要將'date_format'按DATE_FORMAT(t_date,'%b'),DATE_FORMAT(t_date,'%Y-%m')組分組,因爲**所有**非聚合列需要分組。 –

回答

2

您需要將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 
+0

謝謝@a_horse_with_no_name。上述查詢工作很好。 – Sumedh