Mysql中,下面這樣的寫法是可以允許的。但是嚴不嚴謹,支不支持這樣寫?有疑惑過不去這個坎,請大家幫忙看看。
select * from user group by user_name;
怪我咯2017-05-18 10:54:23
最詳細的文件說明在官網上找到了。
MySQL 5.7.5以上版本實作了函數依賴檢測。如果啟用 ONLY_FULL_GROUP_BY SQL 模式(預設),MySQL 將拒絕選擇清單、HAVING 條件或 ORDER BY 清單引用既未在 GROUP BY 子句中命名也不在功能上依賴它們的非聚合列的查詢。 (5.7.5之前,MySQL不偵測函數依賴,預設不啟用ONLY_FULL_GROUP_BY。有關5.7.5之前行為的描述,請參閱MySQL 5.6參考手冊。)
來源:https://dev.mysql.com/doc/ref...
给我你的怀抱2017-05-18 10:54:23
select中的欄位需要在group by中強制寫出來
select user_name from user group by user_name;
http://blog.csdn.net/u2830560...
怪我咯2017-05-18 10:54:23
首先理解下分組是個什麼概念,分組後可以達到什麼樣的效果;
分組是為了按組這個屬性進行統計分析;
例如一個學生表中,按性別分組,可以統計出男生多少人,女生多少人,女生多少人。
在查詢結果列中,必然是sum,count等聚合函數組成。例如:
select count(*),sex from student group by sex;
如果是select * from user group by user_name;是想要得到一個什麼樣的統計結果呢?
mysql5.6預設可以使用這種寫法select * from user group by user_name,但實際上在內部對語句做過轉換;
mysql5.7以後預設不能使用此中寫法,會報錯。
所以寫之前先想想我需要透過分組統計什麼內容,使用適合的聚合函數
天蓬老师2017-05-18 10:54:23
在SQL語句中使用GROUP BY要注意三點
1:不能使用別名;
2:除了函數字段,select中出現的字段都必須出現在group by中,
3:別名不能使用保留字
這三點MYSQL都是沒有要求的!
我們再來看你這個語句,如果user表只有一個字段user_name ,那麼這個語句沒有問題,
如果user表有超過一個字段,那麼這個語句在mysql是沒有問題的,但是在oracle和sqlserver是有問題的
伊谢尔伦2017-05-18 10:54:23
如果存在user_name這個字段,那麼就沒有問題。 group by是按欄位分組,通常和聚合函數一起使用,像你這個sql也是可以執行的。只不過user_name通常都是唯一的,按唯一欄位去分組是沒有意義的。
黄舟2017-05-18 10:54:23
這個屬於mysql的特殊功能支持,如@xuexiphpa所說,可以透過參數關掉。
但不建議使用,group by分組後,理論上傳回的記錄數比分組前少了,一般會透過聚合函數來傳回一些統計資料。
直接使用select *,就不確認回傳的是那一筆記錄了。
给我你的怀抱2017-05-18 10:54:23
group by聚合分組後,select子句中的元素最好只保持:
1、常數
2、group by指定的列名
3、聚合函數,如count()、avg()、sum( *)等等
你這樣*的結果,只列出了每一個分組的一筆記錄,而且不知道是第一個還是隨機的一個值