錯誤
> 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘flowcenter_idm.m_flow_param.rank’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因
mysql從5.7.5開始默認開啓 ONLY_FULL_GROUP_BY
,也就是說只要使用的字段就必須在 Group By
存在,否則報錯。
舉例:
- 如上圖,錯誤原因是,
Order By
中使用的 rank 在Group By
中不存在,所以報錯 - select rank,type FROM m_flow_param GROUP BY type,這種也會報錯,因爲查詢字段 rank,在
Group By
中不存在
解決方法
方法1
保持使用到的字段,都在 Group By
中存在
方法2
關閉 only_full_group_by
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
方法3
使不在 Group By
中的字段不再爲聚合參數
如將上面錯誤 sql
改爲
SELECT
`type`
FROM
m_flow_param
GROUP BY `type`
ORDER BY MAX(`rank`) ASC
由於使用 Max()
函數,使得 rank 值唯一,不再是聚合集合,所以 sql
成功