最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于MySQL8.x group_by報(bào)錯(cuò)的4種解決方案

 更新時(shí)間:2024年06月06日 09:48:52   作者:csdn_aspnet  
這篇文章主要介紹了關(guān)于MySQL8.x group_by報(bào)錯(cuò)的4種解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MySQL8.x group_by報(bào)錯(cuò)解決方案

在我們使用MySQL的時(shí)候總是會(huì)遇到各種各樣的報(bào)錯(cuò),讓人頭痛不已。

其中有一種報(bào)錯(cuò),sql_mode=only_full_group_by,十分常見,每次都是老長的一串出現(xiàn),然后帶走你所有的好心情,如:

 LIMIT 0, 1000 Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.tab_test.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 0.063 sec

由于本地安裝得mysql版本未報(bào)錯(cuò),但是服務(wù)器上的版本報(bào)錯(cuò):

  • 本機(jī)版本:

  • 服務(wù)器版本:

不知道是8.x哪個(gè)版本之后SQL_MODE解除了限制,還是安裝與解壓版的的區(qū)別,目前發(fā)現(xiàn)的問題是服務(wù)器解壓版應(yīng)該是ini未設(shè)置SQL_MODE模式。

出現(xiàn)這樣的報(bào)錯(cuò),并不是因?yàn)槟愕拇a寫得不好,而是因?yàn)樵贛ySQL 5.7后,MySQL默認(rèn)開啟了SQL_MODE嚴(yán)格模式,對(duì)數(shù)據(jù)進(jìn)行嚴(yán)格校驗(yàn)。如果代碼中含有g(shù)roup by聚合操作,那么select中的列,除了使用聚合函數(shù)之外的,如max()、min()等,都必須出現(xiàn)在group by中。

比如說,出現(xiàn)下面這種情況,就會(huì)報(bào)錯(cuò):

select id,aa from tab_test group by aa

如果改成這個(gè)樣子:

select id,aa from tab_test group by id,aa

或者這個(gè)樣子:

select aa from tab_test group by aa

就不會(huì)報(bào)錯(cuò)了。

當(dāng)然,這樣子隨意的改動(dòng)代碼,我們可能就無法得到想要的信息了。

我們可以通過以下四種方法,解決該問題:

方法一:直接修改數(shù)據(jù)庫配置

首先,打開數(shù)據(jù)庫,輸入

select @@global.sql_mode;

這個(gè)時(shí)候,就會(huì)返回得到以下的信息:(不同電腦返回的信息可能不同)

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

如果里面包含 ONLY_FULL_GROUP_BY,那么就重新設(shè)置,在數(shù)據(jù)庫中輸入以下代碼,去掉ONLY_FULL_GROUP_BY即可:

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

但是,當(dāng)我們?cè)僖淮沃匦聠?dòng)數(shù)據(jù)庫時(shí),可能會(huì)恢復(fù)原樣,還是會(huì)出現(xiàn)ONLY_FULL_GROUP_BY的報(bào)錯(cuò),這就需要我們?cè)僖淮涡薷臄?shù)據(jù)庫配置。

那有沒有可以永久生效的辦法呢?當(dāng)然有!參考方法二,就可以使修改數(shù)據(jù)庫配置永久生效!

方法二:修改數(shù)據(jù)庫配置(永久生效)

修改配置文件my.ini

在[mysqld]模塊下新增一行配置:

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

運(yùn)行后重啟,即可生效

方法三:使用 any_value() 或 group_concat()

1. any_value():將分到同一組的數(shù)據(jù)里第一條數(shù)據(jù)的指定列值作為返回?cái)?shù)據(jù)。 (any_value()函數(shù)就是MySQL提供的用來抑制ONLY_FULL_GROUP_BY值被拒絕的)

select a,any_value(b) from test group by a

2. group_concat():將分到同一組的數(shù)據(jù)默認(rèn)用逗號(hào)隔開作為返回?cái)?shù)據(jù),如下圖:

方法四:開動(dòng)腦筋,修改代碼

舉個(gè)例子,在??偷牡?06題中,就出現(xiàn)了類似的情況

SQL206 獲取每個(gè)部門中當(dāng)前員工薪水最高的相關(guān)信息

題目如下:

示例:

如果我們不用上面的方法,直接用下面這種方式查詢,很明顯會(huì)出現(xiàn) ONLY_FULL_GROUP_BY 的報(bào)錯(cuò):

select dept_no,d.emp_no,max(s.salary) 
from dept_emp d 
join salaries s on d.emp_no = s.emp_no
group by d.dept_no

我們可以換一種思路:

首先查詢得到2張表,一張表為員工薪資表 表a,一張表為每個(gè)部門最高員工薪資表 表b。然后通過表連接 on d.emp_no = s.emp_no 使這兩張表結(jié)合,通過on a.salary = b.salary使薪資統(tǒng)一,即這兩張表連接后的表的薪資為每個(gè)部門的最高員工薪資。最后,再通過一次查詢得到每個(gè)部門中當(dāng)前員工薪水最高的相關(guān)信息。

select a.dept_no, a.emp_no, b.salary
from
    (select d.dept_no, s.emp_no, s.salary
     from dept_emp as d join salaries as s 
     on d.emp_no = s.emp_no 
    ) as a
    join
    (select d.dept_no, max(s.salary) as salary
     from dept_emp as d join salaries as s 
     on d.emp_no = s.emp_no
     group by d.dept_no
    ) as b 
    on a.salary = b.salary and a.dept_no = b.dept_no
order by a.dept_no

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql無法成功啟動(dòng)服務(wù)的解決方法(通俗易懂!)

    mysql無法成功啟動(dòng)服務(wù)的解決方法(通俗易懂!)

    Mysql是我們使用數(shù)據(jù)庫時(shí)需要用到的服務(wù),但是在使用過程中常常遇到服務(wù)無法啟動(dòng)的問題,下面這篇文章主要給大家介紹了關(guān)于mysql無法成功啟動(dòng)服務(wù)的解決方法,需要的朋友可以參考下
    2023-02-02
  • mysql觸發(fā)器一個(gè)表改變另一個(gè)表也改變問題

    mysql觸發(fā)器一個(gè)表改變另一個(gè)表也改變問題

    這篇文章主要介紹了mysql觸發(fā)器一個(gè)表改變另一個(gè)表也改變問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL學(xué)習(xí)之分組查詢的用法詳解

    MySQL學(xué)習(xí)之分組查詢的用法詳解

    這篇文章主要為大家詳細(xì)介紹一下MySQL中分組查詢的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-07-07
  • Mysql中條件字段有索引,但使用不了索引的幾種場景詳解

    Mysql中條件字段有索引,但使用不了索引的幾種場景詳解

    這篇文章主要介紹了Mysql中條件字段有索引,但使用不了索引的幾種場景,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • mysql中的sql_mode模式實(shí)例詳解

    mysql中的sql_mode模式實(shí)例詳解

    這篇文章主要介紹了mysql中的sql_mode模式,結(jié)合實(shí)例形式詳細(xì)分析了mysql sql_mode模式相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • MySQL將多行數(shù)據(jù)轉(zhuǎn)換為一行數(shù)據(jù)的實(shí)現(xiàn)示例

    MySQL將多行數(shù)據(jù)轉(zhuǎn)換為一行數(shù)據(jù)的實(shí)現(xiàn)示例

    在MySQL中,GROUP_CONCAT函數(shù)可以將多個(gè)記錄的列值連接成一個(gè)字符串,適用于將多行數(shù)據(jù)合并為單行顯示,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • MySQL數(shù)據(jù)的讀寫分離之maxscale的使用方式

    MySQL數(shù)據(jù)的讀寫分離之maxscale的使用方式

    這篇文章主要介紹了MySQL數(shù)據(jù)的讀寫分離之maxscale的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Ubuntu 14.04下安裝MySQL

    Ubuntu 14.04下安裝MySQL

    1、更新源列表打開"終端窗口",輸入"sudo apt-getupdate"-->回車-->"輸入root用戶的密碼"-->回車,就可以了。如果不運(yùn)行該命令,直接安裝mysql,會(huì)出現(xiàn)"有幾個(gè)軟件包無法下載,您可以運(yùn)行apt-getupdate------"的錯(cuò)誤提示,導(dǎo)致無法安裝。
    2016-04-04
  • Mysql 壞表修復(fù)的幾種解決方案

    Mysql 壞表修復(fù)的幾種解決方案

    本文詳細(xì)介紹了MySQL表損壞的診斷和修復(fù)方法,針對(duì)不同存儲(chǔ)引擎(MyISAM和InnoDB)提供具體解決方案,感興趣的可以了解一下
    2025-11-11
  • 深入了解MySQL ClickHouse中的物化視圖功能

    深入了解MySQL ClickHouse中的物化視圖功能

    MapReduce是一種用于處理大規(guī)模數(shù)據(jù)集的并行編程模型,其特點(diǎn)高效性和可擴(kuò)展性,這篇文章主要介紹了MySQL ClickHouse中的物化視圖功能,需要詳細(xì)了解可以參考下文
    2023-05-05

最新評(píng)論

永川市| 乌拉特前旗| 龙川县| 牟定县| 壶关县| 驻马店市| 会理县| 华亭县| 湖南省| 庄浪县| 个旧市| 祥云县| 新田县| 民县| 阳西县| 桐庐县| 万安县| 广德县| 涿州市| 大兴区| 水富县| 确山县| 南安市| 辽阳县| 邢台市| 仪陇县| 萝北县| 色达县| 嘉祥县| 台州市| 资源县| 大洼县| 兰考县| 木兰县| 衡东县| 三都| 敦化市| 上林县| 乐清市| 灵宝市| 宁陕县|