MySQL Group By 查詢,錯誤1055

MySQL Group By 查詢,錯誤1055

錯誤

> 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 存在,否則報錯。

舉例:

  1. 如上圖,錯誤原因是,Order By 中使用的 rankGroup By 中不存在,所以報錯
  2. 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 成功
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章