六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Mysql5.7出現(xiàn)group by查詢問題的處理方法分享

[摘要]這篇文章主要給大家介紹了關(guān)于Mysql升級到5.7后遇到的group by查詢問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對同樣遇到這個問題的朋友們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小...
這篇文章主要給大家介紹了關(guān)于Mysql升級到5.7后遇到的group by查詢問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對同樣遇到這個問題的朋友們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

發(fā)現(xiàn)問題

最近在將mysql升級到mysql 5.7后,進(jìn)行一些group by 查詢時,比如下面的


SELECT *, count(id) as count FROM `news` GROUP BY `group_id` ORDER BY `inputtime` DESC LIMIT 20

就會報如下錯誤:


SELECT list is not in GROUP BY clause and contains nonaggregated column ‘news.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by.

原因分析

原因是mysql 5.7 模式中。默認(rèn)啟用了ONLY_FULL_GROUP_BY。

ONLY_FULL_GROUP_BY是MySQL提供的一個sql_mode,通過這個sql_mode來提供SQL語句GROUP BY合法性的檢查。

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

this is incompatible with sql_mode=only_full_group_by這句話提示了這違背了mysql的規(guī)則,only fully group by,也就是說在執(zhí)行的時候先分組,根據(jù)查詢的字段(select的字段)在分組的內(nèi)容中取出,所以查詢的字段全部都應(yīng)該在group by分組條件內(nèi);一種情況例外,查詢字段中如果含有聚合函數(shù)的字段不用包含在group by中,就像我上面的count(id)。

后來發(fā)現(xiàn)Order by排序條件的字段也必須要在group by內(nèi),排序的字段也是從分組的字段中取出。 不明白的可以去看一下。

解決辦法:

1.set@@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_pISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

去掉ONLY_FULL_GROUP_BY即可正常執(zhí)行sql.

2. 不去ONLY_FULL_GROUP_BY, 時 select字段必須都在group by分組條件內(nèi)(含有函數(shù)的字段除外)。(如果遇到order by也出現(xiàn)這個問題,同理,order by字段也都要在group by內(nèi))。

3.利用ANY_VALUE()這個函數(shù) https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

This function is useful for GROUP BY queries when the ONLY_FULL_GROUP_BY SQL mode is enabled, for cases when MySQL rejects a query that you know is valid for reasons that MySQL cannot determine. The function return value and type are the same as the return value and type of its argument, but the function result is not checked for the ONLY_FULL_GROUP_BY SQL mode.

如上面的sql語句可寫成


SELECT ANY_VALUE(id)as id,ANY_VALUE(uid) as uid ,ANY_VALUE(username) as username,ANY_VALUE(title) as title,ANY_VALUE(author) as author,ANY_VALUE(thumb) as thumb,ANY_VALUE(description) as description,ANY_VALUE(content) as content,ANY_VALUE(linkurl) as linkurl,ANY_VALUE(url) as url,ANY_VALUE(group_id) as group_id,ANY_VALUE(inputtime) as inputtime, count(id) as count FROM `news` GROUP BY `group_id` ORDER BY ANY_VALUE(inputtime) DESC LIMIT 20

我選用的是第3種方法。

總結(jié)

以上就是Mysql5.7出現(xiàn)group by查詢問題的解決辦法分享的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 五月六月丁香 | 天天噜日日噜 | 天天射美女| 涩涩涩丁香色婷五月网视色 | 日本视频一区二区 | 人人看人人鲁狠狠高清 | 欧美亚洲国产精品久久第一页 | 日韩 欧美 亚洲 中文字幕 | 完整欧美一级淫片免费看 | 啪啪综合网 | 偷拍精品视频一区二区三区 | 中文字幕第一页在线播放 | 色先锋资源网 | 天堂影视网 | 青草视频在线看 | 中文字幕色婷婷在线视频 | 日韩毛片免费视频 | 欧洲毛片真人 | 香蕉视频日本 | 日韩午夜在线视频不卡片 | 亚洲成a人片在线观 | 日本国产一区 | 无间在线免费看 | 深夜在线观看免费看视频 | 青娱乐在线国产 | 欧美网站视频 | 亚洲一区二区三区免费视频 | 亚洲日韩成人 | 亚洲成a人片在线不卡 | 日韩视频国产 | 奇米狠狠操| 欧美在线观看一区二区三 | 亚洲欧美香蕉在线日韩精选 | 日韩美女中文字幕 | 青青青国产高清在线观看视频 | 天天干天天拍 | 一区二区三区欧美日韩 | 日韩视频国产 | 日本一区二区三区免费在线观看 | 中文字幕第15页 | 青草免费免费观看视频在线 |