MySQL--day7--聚合函數

請添加圖片描述
(以下內容全部來自上述課程)
在這里插入圖片描述

聚合函數

1. 介紹

聚合函數作用于一組數據,并對一組數據返回一個值。
請添加圖片描述

  • 聚合函數類型
  • AVG()
  • SUM()
  • MAX()
  • MIN()
  • COUNT()

2. 常見的聚合函數

2.1 AVG / SUM

#1.1 AVG / SUM:只適用于數值類型的字段(或變量)
SELECT AVG(salary),SUM(salary),AVG(salary) * 107 
FROM employees;#如下的操作沒有意義
SELECT SUM(last_name),AVG(last_name),SUM(hire_date) 
FROM employees;

2.2 MAX / MIN

#1.2 MAX / MIN :適用于數值類型、字符串類型、日期時問類型的字段(或變量)
SELECT MAX(salary),MIN(salary)
FROM employees;	SELECT MAX(last_name),MIN(last_name),MAX(hire_date),MIN(hire_date) 
FROM employees;

2.3 COUNT

#1.3 COUNT:
# (1)作用:計算指定字段在查詢結構中出現的個數(不包含NULL)
#                 107             107            107             107        107        107
SELECT COUNT (employee_id),COUNT (salary) ,COUNT(2 * salary),COUNT (1) , COUNT (2), COUNT (*) 
FROM employees ;SELECT	*	
FROM employees;#如果計算表中有多少條記錄,如何實現?
#方式1:COUNT(*)
#方式2: COUNT(1)
#方式3:COUNT(具體字段):不一定對!#(2)注意:計算指定字段出現的個數時,是不計算NULL值的。 
SELECT COUNT(commission_pct) 
FROM employees;SELECT commission_pct 
FROM employees
WHERE commission_pct IS NOT NULL;# (3) 公式:AVG = SUM / COUNT
SELECT AVG(salary),SUM(salary)/COUNT(salary),
AVG(commission_pct),SUM(commission_pct)/COUNT(commission_pct), 
SUM(commission_pct) / 107
FROM employees;	#需求:查詢公司中平均獎金率#錯誤的!
SELECT AVG(commission_pct) 
FROM employees;#正確的:
SELECT SUM(commission_pct) / COUNT(IFNULL(commission_pct,0)), 
AVG(IFNULL(commission_pct,0)) 
FROM employees;

其他:方差、標準差、中位數

3. GROUP BY 的使用

  1. 結論1:SELECT中出現的非組函數的字段必須聲明在GROUP BY 中。
    反之,GROUP BY中聲明的字段可以不出現在SELECT中。
  2. 結論2:GROUP BY聲明在FROM后面、WHERE后面,ORDER BY前面、LIMIT前面
  3. 結論3:MySQL中GROUPBY中使用WITH ROLLUP(總體)
    說明:當使用ROLLUP時,不能同時使用ORDERBY子句進行結果排序,即ROLLUP和ORDERBY是互相排斥的。
#2. GROUP BY 的使用
#需求:查詢各個部門的平均工資,最高工資
SELECT department_id,AVG(salary),SUM(salary) 
FROM employees
GROUP BY department_id#需求:查詢各個job id的平均工資 
SELECT job_id,AVG(salary) 
FROM employees 
GROUP BY job_id;#需求:查詢各個department_id,job_id的平均工資 
SELECT department_id,job_id,AVG (salary) 
FROM employees
GROUP BYdepartment_id,job_id;
#或
SELECT job_id,department_id,AVG (salary) 
FROM employees
GROUP BY job_id,department_id;	
#錯誤的!
SELECT department_id, job_id,AVG (salary) 
FROM employees
GROUP BY department_id;#結論1:SELECT中出現的非組函數的字段必須聲明在GROUP BY 中。
#	反之,GROUP BY中聲明的字段可以不出現在SELECT中。	
#結論2:GROUP BY聲明在FROM后面、WHERE后面,ORDER BY前面、LIMIT前面#結論3:MySQL中GROUPBY中使用WITH ROLLUP(總體)
SELECT department_id,AVG(salary) 
FROM employees
GROUP BY department_id 
WITH ROLLUP;#需求:查詢各個部門的平均工資,按照平均工資升序排列 
SELECT department_id,AVG(salary) avg_sal 
FROM employees
GROUP BY department id
ORDER BY avg_sal AsC;	#說明:當使用ROLLUP時,不能同時使用ORDERBY子句進行結果排序,即ROLLUP和ORDERBY是互相排斥的。
#錯誤的:
SELECT department_id,AVG(salary) avg_sal 
FROM employees
GROUP BY department_id 
WITH ROLLUP 
ORDER BY avg_sal ASC;

4. HAVING的使用

  1. 要求1:如果過濾條件中使用了聚合函數,則必須使用HAVING來替換WHERE。否則,報錯。

  2. 要求2:HAVING必須聲明在GROUP BY 的后面。

  3. 要求3:開發中,我們使用HAVING的前提是SQL中使用了GROUP BY。

  4. 結論:當過濾條件中有聚合函數時,則此過濾條件必須聲明在HAVING中。

  5. 當過濾條件中沒有聚合函數時,則此過濾條件聲明在WHERE中或HAVING中都可以。

  6. 但是,建議大家聲明在WHERE

WHERE與AVING 的對比

  1. 從適用范圍上來講,HAVING的適用范圍更廣。
  2. 如果過濾條件中沒有聚合函數:這種情況下, WHERE的執行效率要高于HAVING
#3.HAVING的使用(作用:用來過濾數據的)
#練習:查詢各個部門中最高工資比10000高的部門信息#錯誤的寫法:
SELECT department_id,MAX(salary) 
FROM employees
WHERE MAX(salary)>10000 
GROUP BY department id;#要求1:如果過濾條件中使用了聚合函數,則必須使用HAVING來替換WHERE。否則,報錯。
#要求2:HAVING必須聲明在GROUP BY 的后面。
#正確的寫法:
SELECT department_id,MAX(salary) 
FROM employees
GROUP BY department id
HAVING MAX(salary)>10000;# 要求3:開發中,我們使用HAVING的前提是SQL中使用了GROUP BY。
#練習:查詢部門id為10,20,30,40這4個部門中最高工資比10000高的部門信息
#方式1: 推薦,執行效率高于方式2
SELECT department_id,MAX (salary) 
FROM employees
WHERE department_id IN(10,20,30,40) 
GROUP BY department_id
HAVING MAX(salary)>10000;#方式2:
SELECT department_id,MAX(salary) 
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000 AND department_id IN(10,20,30,40) ;#結論:	當過濾條件中有聚合函數時,則此過濾條件必須聲明在HAVING中。	
#	當過濾條件中沒有聚合函數時,則此過濾條件聲明在WHERE中或HAVING中都可以。但是,建議大家聲明在WHERE	
/*
WHERE與AVING 的對比
1.從適用范圍上來講,HAVING的適用范圍更廣。
2.如果過濾條件中沒有聚合函數:這種情況下, WHERE的執行效率要高于HAVING
*/

5. SQL底層執行原理

5.1 SELECT 語句的完整結構

#sq192語法:
/*
SELECT .......··.(存在聚合函數) 
FROM .........
WHERE 多表的連接條件AND不包含聚合函數的過濾條件 
GROUP BY......
HAVING 包含聚合函數的過濾條件 
ORDER BY ....,...(ASC / DESC )
LIMIT	...	
*/#sq199語法:
/*
SELECT ....,....,....(存在聚合函數)
FROM ... (LEFT / RIGHT) JOIN ....ON 多表的連接條件
(LEFT / RIGHT) JOIN ... ON.... 
WHERE 不包含聚合函數的過濾條件 
GROUP BY.......
HAVING 包含聚合函數的過濾條件 
ORDER BY ....,...(ASC / DESC ) 
LIMIT ........
*/

5.2 SQL 語句的執行順序

請添加圖片描述

#4.2 SQL語句的執行過程:
#FROM.......-> ON ->(LEFT/RIGNT JOIN) -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -># ORDER BY -> LIMIT

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

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

相關文章

[Java] 封裝

目錄 1. 什么是封裝 2. 訪問修飾符 3. 封裝的好處 4. 封裝的步驟 5. 包 5.1 什么是包 5.2 導入包中的類 5.3 自定義包 5.4 常用的包 6. static關鍵字 6.1 static修飾成員變量 6.2 static修飾成員方法 6.3 Static修飾成員變量初始化 7. 代碼塊 7.1 普通代碼塊 …

Axure元件動作五:設置列表選中項

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 演示視頻: Axure設置列表選中項 課程主題:設置列表選中項 主要內容:下拉列表選項、值、變量值、焦…

Spring框架--IOC技術

一、Spring框架的介紹 1、Spring框架的概述 Spring 是一個開放源代碼的設計層面框架,它解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。Spring是于2003年興起的一個輕量級的Java開發框架,由 Rod Jo…

Flannel后端為UDP模式下,分析數據包的發送方式——tun設備(三)

在分析 Kubernetes 環境中 Flannel UDP 模式的數據包轉發時,我們提到 flannel.1 是一個 TUN 設備,它在數據包處理中起到了關鍵作用。 什么是 TUN 設備? TUN 設備(Tunnel 設備)是 Linux 系統中一種虛擬網絡接口&#x…

2025深圳國際無人機展深度解析:看點、廠商與創新亮點

2025深圳國際無人機展深度解析:看點、廠商與創新亮點 1.背景2.核心看點:技術突破與場景創新2.1 eVTOL(飛行汽車)的規模化展示2.2 智能無人機與無人值守平臺2.3 新材料與核心零部件革新2.4 動態演示與賽事活動 3.頭部無人機廠商4.核…

【Jitsi Meet】(騰訊會議的平替)Docker安裝Jitsi Meet指南-使用內網IP訪問

Docker安裝Jitsi Meet指南-使用內網IP訪問 下載官方代碼配置環境變量復制示例環境文件并修改配置:編輯 .env 文件: 修改 docker-compose.yml 文件生成自簽名證書啟動服務最終驗證 騰訊會議的平替。我們是每天開早晚會的,都是使用騰訊會議。騰…

使用Spring Boot和Spring Security結合JWT實現安全的RESTful API

使用Spring Boot和Spring Security結合JWT實現安全的RESTful API 引言 在現代Web應用中,安全性是至關重要的。Spring Boot和Spring Security提供了強大的工具來保護我們的應用程序,而JWT(JSON Web Token)則是一種輕量級的認證和…

對神經正切核的理解和推導(1)

聲明: 本文是對Neural Tangent Kernel (NTK)基礎推導 - Gearlesskai - 博客園文章內容的理解與推導,里面很多東西對我這種新手來說不太好理解,所以我力求通過這種方式理解文章的大部分內容。希望我的理解可以幫助你更…

基于 STC89C52 的養殖場智能溫控系統設計與實現

摘要 本文提出一種基于 STC89C52 單片機的養殖場環境溫度智能控制系統,通過集成高精度溫度傳感器、智能執行機構及人機交互模塊,實現對養殖環境的實時監測與自動調控。系統具備溫度閾值設定、超限報警及多模式控制功能,可有效提升養殖環境穩定性,降低能耗與人工成本。 一…

微信小程序調試

一、尋找答案 1. 創建小程序 https://zhuanlan.zhihu.com/p/1906013675883561860 2. 若有后端接口,需要調試 https://blog.csdn.net/animatecat/article/details/126949749 3. 比較細教程, 搭建修改配置 https://zhuanlan.zhihu.com/p/1893281527112136235 4. 查找…

使用DeepSeek實現數據處理

一、核心能力全景圖 Ctrl+/ 喚醒智能助手,支持以下數據處理場景: ?? 數據清洗與預處理?? 統計分析與可視化?? 機器學習建模?? 大數據性能優化?? 自動化報告生成? 實時流數據處理二、高頻場景實戰(附魔法口令) 場景1:數據清洗自動化(Python示例) 口令: 處…

符合Python風格的對象(使用 __slots__ 類屬性節省空間)

使用__slots__ 類屬性節省空間 默認情況下,Python 在各個實例中名為__dict__ 的字典里存儲實例屬 性。如 3.9.3 節所述,為了使用底層的散列表提升訪問速度,字典會消 耗大量內存。如果要處理數百萬個屬性不多的實例,通過__slots__…

民宿管理系統5

管理員管理&#xff1a; 新增管理員信息&#xff1a; 前端效果&#xff1a; 前端代碼&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-form-i…

?騰訊地圖軌跡云:重構位置管理的數字神經中樞

——從軌跡追蹤到智能決策&#xff0c;開啟產業互聯網新篇章 在數字經濟與實體經濟深度融合的今天&#xff0c;位置服務已成為企業數字化轉型的核心基礎設施。無論是物流運輸中的車輛調度、共享經濟中的設備管理&#xff0c;還是智慧城市中的交通優化&#xff0c;精準的軌跡數…

rce命令執行原理及靶場實戰(詳細)

2. 原理 在根源上應用系統從設計上要給用戶提供一個指定的遠程命令操作的接口。漏洞主要出現在常見的路由器、防火墻、入侵檢測等設備的web管理界面上。在管理界面提供了一個ping服務。提交后&#xff0c;系統對該IP進行ping&#xff0c;并且返回結果。如果后臺服務器并沒有對…

GeoTools 將 Shp 導入PostGIS 空間數據庫

前言 ? GeoTools 在空間數據轉換處理方面具有強大的能力&#xff0c;能夠高效、簡潔的操縱 Shp 數據。特別是與空間數據庫PostGIS 相結合&#xff0c;更能展示出其空間數據處理的優勢&#xff0c;借助 GeoTools&#xff0c;我們可以實現 Shp 數據高效入庫。 本文上接系列文章 …

基于SpringBoot+Vue的家政服務系統源碼適配H5小程序APP

市場前景 隨著社會經濟的發展和人口老齡化的加劇&#xff0c;家政服務需求不斷增長。我國65歲及以上人口增長較快&#xff0c;2022年我國65歲及以上老年人數量達2.1億人&#xff0c;占比較2016年增長4.1個百分點&#xff0c;達14.9%。我國65歲及以上人口數量龐大&#xff0c;老…

《企業級日志該怎么打?Java日志規范、分層設計與埋點實踐》

大家好呀&#xff01;&#x1f44b; 今天我們要聊一個Java開發中超級重要但又經常被忽視的話題——日志系統&#xff01;&#x1f4dd; 不管你是剛入門的小白&#xff0c;還是工作多年的老司機&#xff0c;日志都是我們每天都要打交道的"好朋友"。那么&#xff0c;如…

1Panel vs 寶塔面板:現代化運維工具的全方位對比

1Panel vs 寶塔面板對比分析 1Panel 和 寶塔面板&#xff08;BT-Panel&#xff09;都是服務器管理工具&#xff0c;旨在簡化 Linux 服務器的運維工作&#xff0c;但它們在設計理念、功能側重點和技術實現上有明顯差異。以下從多個維度對兩者進行對比分析&#xff1a; 1. 定位與…

怎么開發一個網絡協議模塊(C語言框架)之(四) 信號量初始化

// 原始代碼 /* gVrrpInstance.sem = OsixCreateBSem(OSIX_SEM_Q_PRIORITY, OSIX_SEM_FULL); */ gVrrpInstance.sem = OsixCreateMSem(OSIX_SEM_Q_FIFO | OSIX_SEM_DELETE_SAFE); if (gVrrpInstance.sem == NULL) {printf("[VRRP]:vrrp init error, failed to create vrrp…