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

MySQL中ONLY_FULL_GROUP_BY模式的使用

 更新時間:2024年09月10日 11:18:47   作者:Frank牛蛙  
ONLY_FULL_GROUP_BY是MySQL中一個重要的SQL模式,確保在使用GROUP BY時,所有非聚合函數(shù)列必須在GROUP BY子句中出現(xiàn),避免數(shù)據(jù)歧義和不確定性,下面就來介紹一下具體使用

引言:作為一個菜鳥,當寫sql中涉及到group by這樣簡單的語句時,也會出現(xiàn)問題,我在??途W(wǎng)上做sql題時,總報這個錯:

在這里插入圖片描述

ONLY_FULL_GROUP_BY 到底是什么東西呢?

今天寫篇文章解釋一下。

一、GROUP BY使用時的關(guān)鍵要點

1. 理解 GROUP BY 的作用

GROUP BY 用于將數(shù)據(jù)集分割成多個組,每個組由一組具有相同屬性的行組成。這使得聚合函數(shù)可以應用于每一組,而不是整個數(shù)據(jù)集。例如,使用 GROUP BY 可以按產(chǎn)品類別統(tǒng)計銷售總額。

2. 遵守 ONLY_FULL_GROUP_BY 規(guī)則

在 MySQL 中,如果啟用了 ONLY_FULL_GROUP_BY 模式,那么 SELECT 子句中除聚合函數(shù)之外的所有列都必須在 GROUP BY 子句中出現(xiàn)。這是為了避免不確定性和潛在的數(shù)據(jù)歧義。

3. 使用 HAVING 進行條件過濾

HAVING 子句用于對分組后的結(jié)果進行過濾,類似于 WHERE 子句,但 HAVING 適用于聚合結(jié)果。例如,你可以使用 HAVING COUNT(*) > 1 來找出至少出現(xiàn)兩次的組。

4. 正確排序結(jié)果

雖然 GROUP BY 自身不會自動排序結(jié)果,但你通常會希望在結(jié)果集中應用 ORDER BY 來排序分組。例如,你可以按銷售額降序排序產(chǎn)品類別。

5. 注意空值和 NULL 值

在 GROUP BY 中,NULL 值會被視為相同的值,這意味著所有包含 NULL 的行會被歸入同一組。如果需要區(qū)分 NULL 和非 NULL 值,可以使用 COALESCE() 或者條件表達式。

二、 ONLY_FULL_GROUP_BY 規(guī)則

1. 什么是 ONLY_FULL_GROUP_BY?

ONLY_FULL_GROUP_BY 是 MySQL 中的一個 SQL 模式,它要求在任何包含聚合函數(shù)的查詢中,所有在 SELECT 子句中出現(xiàn)的非聚合列也必須在 GROUP BY 子句中出現(xiàn)。換句話說,如果一個查詢使用了聚合函數(shù),那么除了聚合函數(shù)包裹的列以外,所有在 SELECT 子句中出現(xiàn)的列都必須被 GROUP BY 子句引用。

這個規(guī)則確保了查詢結(jié)果的確定性和一致性,避免了由于 SQL 語句的模糊性而導致的潛在錯誤。

2. 為什么需要 ONLY_FULL_GROUP_BY?

在 ONLY_FULL_GROUP_BY 被引入之前,MySQL 允許在沒有 GROUP BY 或者 GROUP BY 不充分的情況下進行查詢。這意味著,即使查詢中包含了沒有被聚合的列,MySQL 也會返回任意一個結(jié)果,這可能會導致誤導性的結(jié)果或數(shù)據(jù)丟失。

例如,假設我們有以下查詢:

SELECT prod_name, COUNT(order_num)
FROM products p
JOIN orders o ON p.prod_id = o.prod_id;

這里,prod_name 列沒有被聚合函數(shù)包裹,也沒有在 GROUP BY 子句中出現(xiàn)。在 ONLY_FULL_GROUP_BY 模式下,這個查詢會失敗,因為 MySQL 不知道如何從多個可能的 prod_name 值中選擇一個來展示。

3.如何啟用或禁用 ONLY_FULL_GROUP_BY?

在 MySQL 中,默認情況下 ONLY_FULL_GROUP_BY 是啟用的。你可以通過檢查 @@sql_mode 系統(tǒng)變量來確認這一點:

SELECT @@sql_mode;

如果 ONLY_FULL_GROUP_BY 已經(jīng)被啟用,并且你想要暫時禁用它(盡管這不是一個推薦的長期解決方案),你可以通過以下命令在會話級禁用它:

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

或者,你也可以在 MySQL 配置文件(my.cnf 或 my.ini)中修改 sql_mode 設置來全局禁用它。

總結(jié)

雖然禁用 ONLY_FULL_GROUP_BY 可能會方便一些查詢的編寫,但從長遠來看,遵循這個規(guī)則對于保持數(shù)據(jù)查詢的準確性和一致性至關(guān)重要。在編寫 SQL 查詢時,始終應確保遵循 ONLY_FULL_GROUP_BY 的指導原則,以避免潛在的數(shù)據(jù)解釋錯誤。

到此這篇關(guān)于MySQL中ONLY_FULL_GROUP_BY模式的使用的文章就介紹到這了,更多相關(guān)MySQL ONLY_FULL_GROUP_BY 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql存儲表情報錯的排查解決

    MySql存儲表情報錯的排查解決

    隨著互聯(lián)網(wǎng)的發(fā)展,產(chǎn)生了許多新類型的字符,例如emoji這種類型的符號,也就是我們通常在聊天時發(fā)的小黃臉表情,下面這篇文章主要給大家介紹了關(guān)于MySql存儲表情報錯的排查解決,需要的朋友可以參考下
    2022-07-07
  • MySql 5.7.21免安裝版本win10下的配置方法

    MySql 5.7.21免安裝版本win10下的配置方法

    這篇文章主要介紹了MySql 5.7.21免安裝版本win10下的配置方法,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • mysql啟動報錯MySQL server PID file could not be found

    mysql啟動報錯MySQL server PID file could not be found

    這篇文章主要介紹了mysql啟動報錯MySQL server PID file could not be found,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • centos7.2下安裝mysql5.7數(shù)據(jù)庫的命令詳解

    centos7.2下安裝mysql5.7數(shù)據(jù)庫的命令詳解

    這篇文章主要介紹了centos7.2下安裝mysql5.7數(shù)據(jù)庫,文中給出了所有的命令,按照命令執(zhí)行就會安裝上 ,需要的朋友可以參考下
    2019-07-07
  • 解析如何使用Zend Framework 連接數(shù)據(jù)庫

    解析如何使用Zend Framework 連接數(shù)據(jù)庫

    本篇文章是對如何使用Zend Framework 連接數(shù)據(jù)庫的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL中SQL Mode的查看與設置詳解

    MySQL中SQL Mode的查看與設置詳解

    在本篇文章里小編給各位分享的是關(guān)于MySQL中SQL Mode的查看與設置詳解內(nèi)容,需要的朋友們可以參考下。
    2020-03-03
  • phpmyadmin報錯:#2003 無法登錄 MySQL服務器的解決方法

    phpmyadmin報錯:#2003 無法登錄 MySQL服務器的解決方法

    通過phpmyadmin連接mysql數(shù)據(jù)庫時提示:“2003 無法登錄 MySQL服務器”。。。很明顯這是沒有啟動mysql服務,右擊我的電腦-管理-找到服務,找到mysql啟動一下
    2012-04-04
  • 數(shù)據(jù)庫SQL調(diào)優(yōu)的幾種方式匯總

    數(shù)據(jù)庫SQL調(diào)優(yōu)的幾種方式匯總

    在項目中,SQL的調(diào)優(yōu)對項目的性能來講至關(guān)重要,所有掌握常見的SQL調(diào)優(yōu)方式是必不可少的,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫SQL調(diào)優(yōu)的幾種方式,需要的朋友可以參考下
    2022-10-10
  • MySQL中binlog2sql實現(xiàn)數(shù)據(jù)誤刪恢復工具

    MySQL中binlog2sql實現(xiàn)數(shù)據(jù)誤刪恢復工具

    本文介紹了binlog2sql工具的使用,它能從MySQL binlog中解析出SQL語句,用于數(shù)據(jù)回滾、主從切換后的數(shù)據(jù)修復等場景,通過設置不同參數(shù),可以獲取原始SQL、回滾SQL等,具有一定的參考價值,感興趣的可以了解一下
    2025-09-09
  • MGR集群搭建及配置過程

    MGR集群搭建及配置過程

    MGR是MySQL數(shù)據(jù)庫未來發(fā)展的一個重要方向,本文重點給大家介紹MGR集群搭建過程分析,對MGR集群搭建相關(guān)知識感興趣的朋友一起看看吧
    2022-02-02

最新評論

嵩明县| 榆社县| 许昌市| 惠州市| 道孚县| 巴林右旗| 丘北县| 叶城县| 阳泉市| 宁国市| 犍为县| 安吉县| 无棣县| 钟山县| 澄城县| 民乐县| 沽源县| 七台河市| 望城县| 邵阳县| 冀州市| 岢岚县| 镶黄旗| 通渭县| 台北县| 清河县| 玛曲县| 永修县| 太仆寺旗| 密山市| 深水埗区| 紫阳县| 丰顺县| 西吉县| 衡山县| 若尔盖县| 吉林市| 吴旗县| 济源市| 同江市| 岱山县|