【MySQL基礎-9】深入理解MySQL中的聚合函數

在數據庫操作中,聚合函數是一類非常重要的函數,它們用于對一組值執行計算并返回單個值。MySQL提供了多種聚合函數,如COUNTSUMAVGMINMAX等。這些函數在數據分析和報表生成中扮演著關鍵角色。本文將深入探討這些聚合函數的使用方法、注意事項以及一些高級技巧。

1. 聚合函數概述

聚合函數主要用于對一組值進行計算,并返回一個單一的值。常見的聚合函數包括:

  • COUNT():計算行數。
  • SUM():計算數值列的總和。
  • AVG():計算數值列的平均值。
  • MIN():找出數值列的最小值。
  • MAX():找出數值列的最大值。

這些函數通常與GROUP BY子句一起使用,以便對分組后的數據進行聚合計算。

2. 常用聚合函數詳解

2.1 COUNT()

COUNT()函數用于計算表中的行數。它可以用于計算所有行或滿足特定條件的行。

-- 計算表中的總行數
SELECT COUNT(*) FROM employees;-- 計算特定條件下的行數
SELECT COUNT(*) FROM employees WHERE department = 'Sales';

2.2 SUM()

SUM()函數用于計算數值列的總和。

-- 計算所有員工的工資總和
SELECT SUM(salary) FROM employees;-- 計算特定部門的工資總和
SELECT SUM(salary) FROM employees WHERE department = 'Engineering';

注意: SUM函數用于求和,只能用于數字類型,字符類型的統計結果為0,日期類型統計結果是毫秒數相加。

2.3 AVG()

AVG()函數用于計算數值列的平均值。

-- 計算所有員工的平均工資
SELECT AVG(salary) FROM employees;-- 計算特定部門的平均工資
SELECT AVG(salary) FROM employees WHERE department = 'Marketing';

2.4 MIN()

MIN()函數用于找出數值列的最小值。

-- 找出所有員工中的最低工資
SELECT MIN(salary) FROM employees;-- 找出特定部門的最低工資
SELECT MIN(salary) FROM employees WHERE department = 'HR';

2.5 MAX()

MAX()函數用于找出數值列的最大值。

-- 找出所有員工中的最高工資
SELECT MAX(salary) FROM employees;-- 找出特定部門的最高工資
SELECT MAX(salary) FROM employees WHERE department = 'Finance';

3. 聚合函數與GROUP BY

GROUP BY子句用于將結果集按一個或多個列進行分組。聚合函數通常與GROUP BY一起使用,以便對每個分組進行聚合計算。

-- 按部門分組,計算每個部門的員工數
SELECT department, COUNT(*) FROM employees GROUP BY department;-- 按部門分組,計算每個部門的平均工資
SELECT department, AVG(salary) FROM employees GROUP BY department;

4. 聚合函數與HAVING

HAVING子句用于過濾分組后的結果集。與WHERE子句不同,HAVING可以用于過濾聚合函數的結果。

-- 找出平均工資大于5000的部門
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;-- 找出員工數超過10人的部門
SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 10;

5. 聚合函數的注意事項

  • NULL值處理:聚合函數通常忽略NULL值。例如,COUNT(column_name)不會計算NULL值。
  • 性能考慮:在大數據集上使用聚合函數可能會影響性能,尤其是在沒有適當索引的情況下。
  • 數據類型:確保聚合函數應用于正確的數據類型。例如,SUM()AVG()應應用于數值列。

6. 高級技巧

6.1 使用DISTINCT

可以在聚合函數中使用DISTINCT關鍵字,以便只對唯一值進行計算。

-- 計算不同部門的數量
SELECT COUNT(DISTINCT department) FROM employees;-- 計算不同工資的總和
SELECT SUM(DISTINCT salary) FROM employees;

6.2 嵌套聚合函數

在某些情況下,可以嵌套使用聚合函數。

-- 計算每個部門的平均工資,然后找出這些平均工資中的最大值
SELECT MAX(avg_salary) FROM (SELECT AVG(salary) AS avg_salary FROM employees GROUP BY department) AS dept_avg;

6.3 使用窗口函數

MySQL 8.0及以上版本支持窗口函數,可以在不分組的情況下進行聚合計算。

-- 計算每個員工的工資以及所在部門的平均工資
SELECT employee_id, salary, AVG(salary) OVER (PARTITION BY department) AS avg_department_salary FROM employees;

7. 總結

聚合函數是MySQL中非常強大的工具,能夠幫助我們輕松地對數據進行匯總和分析。通過結合GROUP BYHAVING子句,我們可以實現更復雜的數據分組和過濾操作。掌握這些函數的使用方法和注意事項,將極大地提升我們在數據庫操作中的效率和靈活性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898162.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows版本的時序數據庫TDengine安裝以及可視化工具

了解時序數據庫TDengine,可以點擊官方文檔進行詳細查閱 安裝步驟 首先找到自己需要下載的版本,這邊我暫時只寫windows版本的安裝 首先我們需要點開官網,找到發布歷史,目前TDengine的windows版本只更新到3.0.7.1,我們…

Web測試

7、Web安全測試概述 黑客技術的發展歷程 黑客基本涵義是指一個擁有熟練電腦技術的人,但大部分的媒體習慣將“黑客”指作電腦侵入者。 黑客技術的發展 在早期,黑客攻擊的目標以系統軟件居多。早期互聯網Web并非主流應用,而且防火墻技術還沒有…

華為OD機試 - 最長的完全交替連續方波信號(Java 2023 B卷 200分)

題目描述 給定一串方波信號,要求找出其中最長的完全連續交替方波信號并輸出。如果有多個相同長度的交替方波信號,輸出任意一個即可。方波信號的高位用1標識,低位用0標識。 說明: 一個完整的信號一定以0開始并以0結尾,即010是一個完整的信號,但101,1010,0101不是。輸入的…

游戲引擎學習第163天

我們可以在資源處理器中使用庫 因為我們的資源處理器并不是游戲的一部分,所以它可以使用庫。我說過我不介意讓它使用庫,而我提到這個的原因是,今天我們確實有一個選擇——可以使用庫。 生成字體位圖的兩種方式:求助于 Windows 或…

7、什么是死鎖,如何避免死鎖?【高頻】

(1)什么是死鎖: 死鎖 是指在兩個或多個進程的執行時,每個進程都持有資源 并 等待其他進程 釋放 它所需的資源,如果此時所有的進程一直占有資源而不釋放,就會陷入互相等待的一種僵局狀態。 死鎖只有同時滿足…

Compose 實踐與探索十四 —— 自定義布局

自定義布局在 Compose 中相對于原生的需求已經小了很多,先講二者在本質上的邏輯,再說它們的使用場景,兩相對比就知道為什么 Compose 中的自定義布局的需求較小了。 原生是在 xml 布局文件不太方便或者無法滿足需求時才會在代碼中通過自定義 …

【C++】:C++11詳解 —— 入門基礎

目錄 C11簡介 統一的列表初始化 1.初始化范圍擴展 2.禁止窄化轉換(Narrowing Conversion) 3.解決“最令人煩惱的解析”(Most Vexing Parse) 4.動態數組初始化 5. 直接初始化返回值 總結 聲明 1.auto 類型推導 2. declty…

oracle刪除表中重復數據

需求: 刪除wfd_procs_nodes_rwk表中,huser_id、dnode_id、rwk_name字段值相同的記錄,如果有多條,只保留一條。 SQL: DELETE FROM wfd_procs_nodes_rwk t WHERE t.rowid > (SELECT MIN(t1.rowid)FROM wfd_procs_n…

ESP32學習 -從STM32工程架構進階到ESP32架構

ESP32與STM32項目文件結構對比解析 以下是對你提供的ESP32項目文件結構的詳細解釋,并與STM32(以STM32CubeIDE為例)的常見結構進行對比,幫助你理解兩者的差異: 1. ESP32項目文件解析 文件/目錄作用STM32對應或差異set…

整形在內存中的存儲(例題逐個解析)

目錄 一.相關知識點 1.截斷: 2.整形提升: 3.如何 截斷,整型提升? (1)負數 (2)正數 (3)無符號整型,高位補0 注意:提升后得到的…

HTML中滾動加載的實現

設置div的overflow屬性,可以使得該div具有滾動效果,下面以div中包含的是table來舉例。 當table的元素較多,以至于超出div的顯示范圍的話,觀察下該div元素的以下3個屬性: clientHeight是div的顯示高度,scrol…

Netty基礎—7.Netty實現消息推送服務二

大綱 1.Netty實現HTTP服務器 2.Netty實現WebSocket 3.Netty實現的消息推送系統 (1)基于WebSocket的消息推送系統說明 (2)消息推送系統的PushServer (3)消息推送系統的連接管理封裝 (4)消息推送系統的ping-pong探測 (5)消息推送系統的全連接推送 (6)消息推送系統的HTTP…

人工智能助力家庭機器人:從清潔到陪伴的智能轉型

引言:家庭機器人進入智能時代 過去,家庭機器人只是簡單的“工具”,主要用于掃地、拖地、擦窗等單一任務。然而,隨著人工智能(AI)技術的迅猛發展,家庭機器人正經歷從“機械助手”向“智能管家”甚…

ssh轉發筆記

工作中又學到了,大腦轉不過來 現有主機A,主機B,主機C A能訪問B,B能訪問C,A不能訪問C C上80端口有個服務,現在A想訪問這個服務,領導讓用ssh轉發,研究半天沒找到理想的語句&#xf…

清晰易懂的Miniconda安裝教程

小白也能看懂的 Miniconda 安裝教程 Miniconda 是一個輕量級的 Python 環境管理工具,適合初學者快速搭建 Python 開發環境。本教程將手把手教你如何在 Windows 系統上安裝 Miniconda,并配置基礎環境,確保你能夠順利使用 Python 進行開發。即…

Flume詳解——介紹、部署與使用

1. Flume 簡介 Apache Flume 是一個專門用于高效地 收集、聚合、傳輸 大量日志數據的 分布式、可靠 的系統。它特別擅長將數據從各種數據源(如日志文件、消息隊列等)傳輸到 HDFS、HBase、Kafka 等大數據存儲系統。 特點: 可擴展&#xff1…

破解企業內部盜版軟件管理難題的技術方案

引言:盜版軟件——企業數字化轉型的“隱形地雷” 據BSA《全球軟件調查報告》顯示,37%的企業存在員工私自安裝盜版軟件的行為,由此引發的法律訴訟、數據泄露及罰款風險年均增長28%。LMT基于“預防-檢測-治理”三位一體技術框架,為…

Spring源碼解析

第一講 容器接口 BeanFactory和ApplicationContext接口的具體繼承關系: ApplicationContext 間接繼承了BeanFactory BeanFactory是父接口ApplicationContext是子接口,里面一些功能調用了BeanFactory BeanFactory的功能 表面上只有 getBean&#xff0…

Django Rest Framework 創建純凈版Django項目部署DRF

描述創建純凈版的Django項目和 Django Rest Framework 環境的部署 一、創建Django項目 1. 環境說明 操作系統 Windows11python版本 3.9.13Django版本 V4.2.202. 操作步驟(在Pycharm中操作) 創建Python項目drfStudy、虛擬環境 ?虛擬環境中安裝 jdangopip install django==4.…

圖解AUTOSAR_CP_NetworkManagementInterface

AUTOSAR 網絡管理接口(Nm)詳解 AUTOSAR 網絡管理接口規范與實現指南 目錄 1. 概述 1.1. 網絡管理接口的作用1.2. 網絡管理接口的特點 2. 網絡管理接口架構 2.1. 架構概覽2.2. 模塊交互關系 3. 網絡管理狀態機 3.1. 狀態定義3.2. 狀態轉換 4. 協調算法 4.1. 協調關閉流程4.2. 同…