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. 數組按鍵值封裝!2. docker不顯示端口映射呢?3. java - 阿里的開發手冊中為什么禁用map來作為查詢的接受類?4. java - 無法執行該操作,因為鏈接服務器 "***" 的 OLE DB 訪問接口 "SQLNCLI" 無法啟動分布式事務。解決方法?5. 主題切換問題,用過別人的webapp在后臺切換模板主題后手機端打開網頁就是切換到的主題了6. javascript - 為什么創建多行多列的表格最后只有一行內有表格7. javascript - 使用vue官方腳手架進行單元測試,如何覆蓋到watch里的變量?8. clone - git sourceTree克隆倉庫時,都不停彈出Password Required彈窗,即時輸入正確的git賬號密碼還是彈出9. javascript - webpack中alias配置中的“@”是什么意思?10. html5 - 使用echarts中的圖表 一個頁面導入了好幾個js圖表 實現echarts圖表隨著瀏覽器窗口變化而變化時出現了問題
