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

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

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

熱門標簽:電銷機器人價格多少錢一臺 龍圖酒吧地圖標注 百度地圖標注地方備注 怎么辦理400電話呢 好搜地圖標注 地圖標注圖標素材入駐 怎么申請400電話申請 400電話申請什么好 電話機器人免費嗎

發現問題

最近在將mysql升級到mysql 5.7后,進行一些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 模式中。默認啟用了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的規則,only fully group by,也就是說在執行的時候先分組,根據查詢的字段(select的字段)在分組的內容中取出,所以查詢的字段全部都應該在group by分組條件內;一種情況例外,查詢字段中如果含有聚合函數的字段不用包含在group by中,就像我上面的count(id)。

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

解決辦法:

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即可正常執行sql.

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

3.利用ANY_VALUE()這個函數 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種方法。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 如何在datatable中使用groupby進行分組統計
  • Sequelize中用group by進行分組聚合查詢
  • MySQL高級查詢之與Group By集合使用介紹
  • 解析mysql中:單表distinct、多表group by查詢去除重復記錄
  • group by 按某一時間段分組統計并查詢(推薦)

標簽:撫順 固原 防疫工作 汕尾 浙江 內江 溫州 廣西

巨人網絡通訊聲明:本文標題《Mysql升級到5.7后遇到的group by查詢問題解決》,本文關鍵詞  Mysql,升級,到,5.7,后,遇到,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql升級到5.7后遇到的group by查詢問題解決》相關的同類信息!
  • 本頁收集關于Mysql升級到5.7后遇到的group by查詢問題解決的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 大同县| 赤城县| 定边县| 建宁县| 新巴尔虎右旗| 龙泉市| 张掖市| 双桥区| 巴马| 伊宁市| 大庆市| 六安市| 拜城县| 泸水县| 蕉岭县| 商城县| 南阳市| 虎林市| 格尔木市| 洛阳市| 巴彦县| 高陵县| 濮阳县| 留坝县| 曲阳县| 孟州市| 自治县| 衡阳市| 镇平县| 泰兴市| 大石桥市| 莒南县| 上栗县| 襄城县| 藁城市| 郁南县| 绥中县| 扶沟县| 禄劝| 谢通门县| 荥经县|