Mysql中group by的問題。 。
某草草
某草草 2017-05-18 10:52:23
0
9
697

Mysql中,下面這樣的寫法是可以允許的。但是嚴​​不嚴謹,支不支持這樣寫?有疑惑過不去這個坎,請大家幫忙看看。

select * from user group by user_name;
某草草
某草草

全部回覆(9)
刘奇

最詳細的文件說明在官網上找到了。

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...

给我你的怀抱

select中的欄位需要在group by中強制寫出來
select user_name from user group by user_name;

http://blog.csdn.net/u2830560...

刘奇

首先理解下分組是個什麼概念,分組後可以達到什麼樣的效果;
分組是為了按組這個屬性進行統計分析;
例如一個學生表中,按性別分組,可以統計出男生多少人,女生多少人,女生多少人。
在查詢結果列中,必然是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以後預設不能使用此中寫法,會報錯。
所以寫之前先想想我需要透過分組統計什麼內容,使用適合的聚合函數

Peter_Zhu

在SQL語句中使用GROUP BY要注意三點
1:不能使用別名;
2:除了函數字段,select中出現的字段都必須出現在group by中,
3:別名不能使用保留字
這三點MYSQL都是沒有要求的!
我們再來看你這個語句,如果user表只有一個字段user_name ,那麼這個語句沒有問題,
如果user表有超過一個字段,那麼這個語句在mysql是沒有問題的,但是在oracle和sqlserver是有問題的

刘奇

雷雷

伊谢尔伦

如果存在user_name這個字段,那麼就沒有問題。 group by是按欄位分組,通常和聚合函數一起使用,像你這個sql也是可以執行的。只不過user_name通常都是唯一的,按唯一欄位去分組是沒有意義的。

黄舟

這個屬於mysql的特殊功能支持,如@xuexiphpa所說,可以透過參數關掉。

但不建議使用,group by分組後,理論上傳回的記錄數比分組前少了,一般會透過聚合函數來傳回一些統計資料。
直接使用select *,就不確認回傳的是那一筆記錄了。

滿天的星座

一般個聚合函數結合用的比較多

给我你的怀抱

group by聚合分組後,select子句中的元素最好只保持:
1、常數
2、group by指定的列名
3、聚合函數,如count()、avg()、sum( *)等等

你這樣*的結果,只列出了每一個分組的一筆記錄,而且不知道是第一個還是隨機的一個值

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!