Mysql中g(shù)roup by的問(wèn)題。。
問(wèn)題描述
Mysql中,下面這樣的寫法是可以允許的。但是嚴(yán)不嚴(yán)謹(jǐn),支不支持這樣寫?有疑惑過(guò)不去這個(gè)坎,請(qǐng)大家?guī)兔纯础?/p>
select * from user group by user_name;
問(wèn)題解答
回答1:最詳細(xì)的文檔說(shuō)明在官網(wǎng)找到了。
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.)
來(lái)源:https://dev.mysql.com/doc/ref...
回答2:select中的字段需要在group by中強(qiáng)制寫出來(lái)select user_name from user group by user_name;
http://blog.csdn.net/u2830560...
回答3:首先理解下分組是個(gè)什么概念,分組后可以達(dá)到什么樣的效果;分組是為了按組這個(gè)屬性進(jìn)行統(tǒng)計(jì)分析;例如一個(gè)學(xué)生表中,按性別分組,可以統(tǒng)計(jì)出男生多少人,女生多少人。在查詢結(jié)果列中,必然是sum,count等聚合函數(shù)組成。例如:select count(*),sex from student group by sex;如果是select * from user group by user_name;是想要得到一個(gè)什么樣的統(tǒng)計(jì)結(jié)果呢?mysql5.6默認(rèn)可以使用這種寫法select * from user group by user_name,但實(shí)際上在內(nèi)部對(duì)語(yǔ)句做過(guò)轉(zhuǎn)換;mysql5.7以后默認(rèn)不能使用此中寫法,會(huì)報(bào)錯(cuò)。所以寫之前先想想我需要通過(guò)分組統(tǒng)計(jì)什么內(nèi)容,使用適合的聚合函數(shù)
回答4:在SQL語(yǔ)句中使用GROUP BY要注意三點(diǎn)1:不能使用別名;2:除了函數(shù)字段,select中出現(xiàn)的字段都必須出現(xiàn)在group by中,3:別名不能使用保留字這三點(diǎn)MYSQL都是沒(méi)有要求的!我們?cè)賮?lái)看你這個(gè)語(yǔ)句,如果user表只有一個(gè)字段user_name ,那么這個(gè)語(yǔ)句沒(méi)有問(wèn)題,如果user表有超過(guò)一個(gè)字段,那么這個(gè)語(yǔ)句在mysql是沒(méi)有問(wèn)題的,但是在oracle和sqlserver是有問(wèn)題的
回答5:select * from user group by user_name;//這么寫其實(shí)也沒(méi)問(wèn)題 但是 實(shí)際上 你使用 group by 的時(shí)候 你需要用的 就只有 user_name 這個(gè)字段吧(通常來(lái)說(shuō))//用什么字段就取什么字段就好。不一定要用 ‘*’ 用誰(shuí)取誰(shuí)就好回答6:
如果存在user_name這個(gè)字段,那么就沒(méi)有問(wèn)題。group by是按字段分組,通常和聚合函數(shù)一起使用,像你這個(gè)sql也是可以執(zhí)行的。只不過(guò)user_name通常都是唯一的,按唯一字段去分組是沒(méi)有意義的。
回答7:這個(gè)屬于mysql的特殊功能支持,如@xuexiphpa所說(shuō),可以通過(guò)參數(shù)關(guān)掉。
但不建議使用,group by分組后,理論上返回的記錄數(shù)比分組前少了,一般會(huì)通過(guò)聚合函數(shù)來(lái)返回一些統(tǒng)計(jì)數(shù)據(jù)。直接使用select *,就不確認(rèn)返回的是那一條記錄了。
回答8:一般個(gè)聚合函數(shù)結(jié)合用的比較多
回答9:group by聚合分組后,select子句中的元素最好只保持:1、常數(shù)2、group by指定的列名3、聚合函數(shù),如count()、avg()、sum(*)等等
你這樣*的結(jié)果,只列出了每一個(gè)分組的一條記錄,而且不知道是第一個(gè)還是是隨機(jī)的一個(gè)值
相關(guān)文章:
1. docker-compose中volumes的問(wèn)題2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. boot2docker無(wú)法啟動(dòng)4. nignx - docker內(nèi)nginx 80端口被占用5. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎6. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.7. java - SSH框架中寫分頁(yè)時(shí)service層中不能注入分頁(yè)類8. docker api 開(kāi)發(fā)的端口怎么獲取?9. docker容器呢SSH為什么連不通呢?10. dockerfile - 為什么docker容器啟動(dòng)不了?

網(wǎng)公網(wǎng)安備