欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL中g(shù)roupBy和eq的同時(shí)使用問(wèn)題

 更新時(shí)間:2024年05月12日 15:07:31   作者:遨游在知識(shí)的海洋里無(wú)法自拔  
groupBy和eq同時(shí)使用可能會(huì)導(dǎo)致錯(cuò)誤,本文就來(lái)介紹一下SQL中g(shù)roupBy和eq的同時(shí)使用問(wèn)題,感興趣的可以了解一下

groupByeq同時(shí)使用可能會(huì)導(dǎo)致錯(cuò)誤。這是因?yàn)樵诖蠖鄶?shù)關(guān)系型數(shù)據(jù)庫(kù)中,當(dāng)使用groupBy對(duì)結(jié)果進(jìn)行分組聚合時(shí),只能選擇groupBy的字段和聚合函數(shù)的結(jié)果作為返回結(jié)果,不能使用其他的非聚合查詢條件。

在 SQL 語(yǔ)句中,GROUP BY 用于對(duì)查詢結(jié)果進(jìn)行分組,而 WHERE 子句用于篩選符合條件的行。當(dāng)我們使用GROUP BY子句時(shí),我們只能查詢被分組的列和聚合函數(shù)的計(jì)算結(jié)果,并且不能再在SELECT之后使用WHERE子句,否則就會(huì)出現(xiàn)錯(cuò)誤。

如果您需要同時(shí)使用GROUP BYWHERE,可以使用另一個(gè)子句:HAVING,HAVING為分組后的結(jié)果集設(shè)置條件。

如果您需要根據(jù)條件進(jìn)行過(guò)濾,并且同時(shí)使用groupBy進(jìn)行分組聚合,可以考慮使用having語(yǔ)句來(lái)替代eq條件。

Wrappers.<ZxxxPlaybackRecord>query()
    .select("chapter_id")
    .groupBy("chapter_id")
    .having("chapter_id = {0}", courseStatistics.getChapterId())

在此示例中,我們使用having方法來(lái)設(shè)置過(guò)濾條件,其中{0}是占位符,表示傳入courseStatistics.getChapterId()的值。

在 MySQL 5.7 版本中,默認(rèn)的 sql_mode 不包含 ONLY_FULL_GROUP_BY,因此即使在 GROUP BY 子句中未包含所有非聚合列,也不會(huì)觸發(fā)錯(cuò)誤。

而在 MySQL 8.0 版本中,默認(rèn)的 sql_mode 包含了 ONLY_FULL_GROUP_BY,這意味著在 GROUP BY 語(yǔ)句中必須包含查詢結(jié)果中的所有非聚合列,否則就會(huì)報(bào)錯(cuò)。

為了解決這個(gè)問(wèn)題,您可以采取以下兩種方法之一:

調(diào)整 SQL 查詢語(yǔ)句:

您需要確保在 GROUP BY 語(yǔ)句中包含所有非聚合的列,并且這些列的值可以唯一確定。如果有任何一個(gè)非聚合的列不能唯一確定,則需要將其從 SELECT 子句中刪除或添加到 GROUP BY 子句中。

更新 MySQL 的配置:

如果您希望禁用 ONLY_FULL_GROUP_BY 模式,可以修改 MySQL 的配置文件,將 sql_mode 的值更改為適當(dāng)?shù)脑O(shè)置。例如,您可以將其設(shè)置為:

sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

保存并重啟 MySQL 服務(wù)以使更改生效。

請(qǐng)注意,對(duì)于涉及聚合操作和 GROUP BY 的查詢,建議始終遵循 SQL 標(biāo)準(zhǔn),并包含查詢結(jié)果中所有非聚合的列到 GROUP BY 子句中。這樣可以確保查詢的結(jié)果是一致的,并且在不同版本的 MySQL 中都能正常工作。

到此這篇關(guān)于SQL中g(shù)roupBy和eq的同時(shí)使用問(wèn)題的文章就介紹到這了,更多相關(guān)groupBy和eq同時(shí)使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論