婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Mysql升級(jí)到5.7后遇到的group by查詢問題解決

Mysql升級(jí)到5.7后遇到的group by查詢問題解決

熱門標(biāo)簽:電銷機(jī)器人價(jià)格多少錢一臺(tái) 龍圖酒吧地圖標(biāo)注 百度地圖標(biāo)注地方備注 怎么辦理400電話呢 好搜地圖標(biāo)注 地圖標(biāo)注圖標(biāo)素材入駐 怎么申請(qǐng)400電話申請(qǐng) 400電話申請(qǐng)什么好 電話機(jī)器人免費(fèi)嗎

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

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

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

就會(huì)報(bào)如下錯(cuò)誤:

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提供的一個(gè)sql_mode,通過這個(gè)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í)行的時(shí)候先分組,根據(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_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

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

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

3.利用ANY_VALUE()這個(gè)函數(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é)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 如何在datatable中使用groupby進(jìn)行分組統(tǒng)計(jì)
  • Sequelize中用group by進(jìn)行分組聚合查詢
  • MySQL高級(jí)查詢之與Group By集合使用介紹
  • 解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄
  • group by 按某一時(shí)間段分組統(tǒng)計(jì)并查詢(推薦)

標(biāo)簽:撫順 固原 防疫工作 汕尾 浙江 內(nèi)江 溫州 廣西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql升級(jí)到5.7后遇到的group by查詢問題解決》,本文關(guān)鍵詞  Mysql,升級(jí),到,5.7,后,遇到,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mysql升級(jí)到5.7后遇到的group by查詢問題解決》相關(guān)的同類信息!
  • 本頁收集關(guān)于Mysql升級(jí)到5.7后遇到的group by查詢問題解決的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 济阳县| 苏尼特右旗| 福清市| 巢湖市| 上蔡县| 小金县| 托里县| 平泉县| 河北省| 东兴市| 建阳市| 敦煌市| 邵东县| 米脂县| 普安县| 高州市| 贵定县| 云和县| 德保县| 曲麻莱县| 台中市| 即墨市| 阿勒泰市| 卓资县| 怀仁县| 宜黄县| 奉贤区| 沈阳市| 桃园县| 郴州市| 荆州市| 那坡县| 昭平县| 若尔盖县| 黄平县| 金秀| 南涧| 泗水县| 天柱县| 湖南省| 宜春市|