Mysql中group by的問題。。
問題描述
Mysql中,下面這樣的寫法是可以允許的。但是嚴不嚴謹,支不支持這樣寫?有疑惑過不去這個坎,請大家幫忙看看。
select * from user group by user_name;
問題解答
回答1:最詳細的文檔說明在官網找到了。
MySQL 5.7.5 and up implements detection of functional dependence. If the ONLY_FULL_GROUP_BY SQL mode is enabled (which it is by default), MySQL rejects queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on them. (Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.)
來源:https://dev.mysql.com/doc/ref...
回答2:select中的字段需要在group by中強制寫出來select user_name from user group by user_name;
http://blog.csdn.net/u2830560...
回答3:首先理解下分組是個什么概念,分組后可以達到什么樣的效果;分組是為了按組這個屬性進行統計分析;例如一個學生表中,按性別分組,可以統計出男生多少人,女生多少人。在查詢結果列中,必然是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以后默認不能使用此中寫法,會報錯。所以寫之前先想想我需要通過分組統計什么內容,使用適合的聚合函數
回答4:在SQL語句中使用GROUP BY要注意三點1:不能使用別名;2:除了函數字段,select中出現的字段都必須出現在group by中,3:別名不能使用保留字這三點MYSQL都是沒有要求的!我們再來看你這個語句,如果user表只有一個字段user_name ,那么這個語句沒有問題,如果user表有超過一個字段,那么這個語句在mysql是沒有問題的,但是在oracle和sqlserver是有問題的
回答5:select * from user group by user_name;//這么寫其實也沒問題 但是 實際上 你使用 group by 的時候 你需要用的 就只有 user_name 這個字段吧(通常來說)//用什么字段就取什么字段就好。不一定要用 ‘*’ 用誰取誰就好回答6:
如果存在user_name這個字段,那么就沒有問題。group by是按字段分組,通常和聚合函數一起使用,像你這個sql也是可以執行的。只不過user_name通常都是唯一的,按唯一字段去分組是沒有意義的。
回答7:這個屬于mysql的特殊功能支持,如@xuexiphpa所說,可以通過參數關掉。
但不建議使用,group by分組后,理論上返回的記錄數比分組前少了,一般會通過聚合函數來返回一些統計數據。直接使用select *,就不確認返回的是那一條記錄了。
回答8:一般個聚合函數結合用的比較多
回答9:group by聚合分組后,select子句中的元素最好只保持:1、常數2、group by指定的列名3、聚合函數,如count()、avg()、sum(*)等等
你這樣*的結果,只列出了每一個分組的一條記錄,而且不知道是第一個還是是隨機的一個值
相關文章:
1. android - webview 自定義加載進度條2. 為什么我ping不通我的docker容器呢???3. javascript - 微信小程序限制加載個數4. 并發模型 - python將進程池放在裝飾器里為什么不生效也沒報錯5. mysql - 怎么讓 SELECT 1+null 等于 16. python 怎樣用pickle保存類的實例?7. linux - openSUSE 上,如何使用 QQ?8. 大家好,請問在python腳本中怎么用virtualenv激活指定的環境?9. linux - 升級到Python3.6后GDB無法正常運行?10. Python中, 仿照經典代碼實現單例, 卻出現了不是單例的的狀態, 代碼哪里出錯了 ?
