【數據庫】MySQL常見聚合查詢詳解

在數據庫操作中,聚合查詢是非常重要的一部分。通過聚合查詢,我們可以對數據進行匯總、統計和分析。MySQL提供了豐富的聚合函數來滿足不同的需求。本文將詳細介紹MySQL中常見的40個聚合函數及其使用場景,并通過8個的案例展示它們的用法。

一、聚合函數的概念

聚合函數是對一組值執行計算并返回單個值的函數。它們通常用于SELECT語句中,與GROUP BY子句一起使用,以便對數據進行分組和匯總。

二、常見的40個聚合函數

以下是MySQL中常見的40個聚合函數及其使用場景:

聚合函數描述使用場景
COUNT()返回行數統計記錄數
SUM()返回數值列的總和計算總和
AVG()返回數值列的平均值計算平均值
MIN()返回列中的最小值查找最小值
MAX()返回列中的最大值查找最大值
GROUP_CONCAT()返回一組值的連接字符串將多行數據合并為一個字符串
STD()返回數值列的標準差計算標準差
VARIANCE()返回數值列的方差計算方差
BIT_AND()返回按位與運算的結果按位與運算
BIT_OR()返回按位或運算的結果按位或運算
BIT_XOR()返回按位異或運算的結果按位異或運算
JSON_ARRAYAGG()返回JSON數組將多行數據合并為JSON數組
JSON_OBJECTAGG()返回JSON對象將多行數據合并為JSON對象
VAR_POP()返回總體方差計算總體方差
VAR_SAMP()返回樣本方差計算樣本方差
STDDEV_POP()返回總體標準差計算總體標準差
STDDEV_SAMP()返回樣本標準差計算樣本標準差
COVAR_POP()返回總體協方差計算總體協方差
COVAR_SAMP()返回樣本協方差計算樣本協方差
CORR()返回相關系數計算相關系數
MEDIAN()返回中位數計算中位數
PERCENTILE_CONT()返回連續百分位數計算連續百分位數
PERCENTILE_DISC()返回離散百分位數計算離散百分位數
RANK()返回行的排名計算行的排名
DENSE_RANK()返回行的密集排名計算行的密集排名
ROW_NUMBER()返回行的序號計算行的序號
NTILE()返回行的分桶號計算行的分桶號
FIRST_VALUE()返回窗口中的第一個值獲取窗口中的第一個值
LAST_VALUE()返回窗口中的最后一個值獲取窗口中的最后一個值
LAG()返回前一行中的值獲取前一行中的值
LEAD()返回后一行中的值獲取后一行中的值
CUME_DIST()返回累積分布計算累積分布
PERCENT_RANK()返回百分比排名計算百分比排名
NTH_VALUE()返回窗口中的第N個值獲取窗口中的第N個值
JSON_EXTRACT()返回JSON文檔中的值提取JSON文檔中的值
JSON_UNQUOTE()返回JSON文檔中的未引用值提取JSON文檔中的未引用值
JSON_CONTAINS()返回JSON文檔是否包含指定值檢查JSON文檔是否包含指定值
JSON_CONTAINS_PATH()返回JSON文檔是否包含指定路徑檢查JSON文檔是否包含指定路徑
JSON_KEYS()返回JSON文檔中的鍵提取JSON文檔中的鍵
JSON_LENGTH()返回JSON文檔的長度計算JSON文檔的長度

三、聚合查詢的案例

1. 創建示例表

首先,我們創建一個示例表sales,用于演示各種聚合查詢。

CREATE TABLE sales (id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(50),quantity INT,price DECIMAL(10, 2),sale_date DATE
);INSERT INTO sales (product_name, quantity, price, sale_date) VALUES
('Apple', 10, 1.50, '2023-01-01'),
('Banana', 20, 0.50, '2023-01-01'),
('Apple', 15, 1.50, '2023-01-02'),
('Banana', 25, 0.50, '2023-01-02'),
('Orange', 30, 0.75, '2023-01-03'),
('Orange', 35, 0.75, '2023-01-04');

2. 使用COUNT()統計記錄數

-- 統計總記錄數
SELECT COUNT(*) AS total_records FROM sales;-- 統計不同產品的記錄數
SELECT product_name, COUNT(*) AS product_count
FROM sales
GROUP BY product_name;

輸出結果:

+---------------+
| total_records |
+---------------+
|             6 |
+---------------++--------------+---------------+
| product_name | product_count |
+--------------+---------------+
| Apple        |             2 |
| Banana       |             2 |
| Orange       |             2 |
+--------------+---------------+

3. 使用SUM()計算總和

-- 計算所有產品的總銷售額
SELECT SUM(quantity * price) AS total_sales FROM sales;-- 計算每個產品的總銷售額
SELECT product_name, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY product_name;

輸出結果:

+-------------+
| total_sales |
+-------------+
|       83.75 |
+-------------++--------------+-------------+
| product_name | total_sales |
+--------------+-------------+
| Apple        |       37.50 |
| Banana       |       22.50 |
| Orange       |       48.75 |
+--------------+-------------+

4. 使用AVG()計算平均值

-- 計算所有產品的平均銷售額
SELECT AVG(quantity * price) AS average_sales FROM sales;-- 計算每個產品的平均銷售額
SELECT product_name, AVG(quantity * price) AS average_sales
FROM sales
GROUP BY product_name;

輸出結果:

+---------------+
| average_sales |
+---------------+
|     13.958333 |
+---------------++--------------+---------------+
| product_name | average_sales |
+--------------+---------------+
| Apple        |        18.750 |
| Banana       |        11.250 |
| Orange       |        24.375 |
+--------------+---------------+

5. 使用MIN()MAX()查找最小值和最大值

-- 查找所有產品的最小和最大銷售額
SELECT MIN(quantity * price) AS min_sales, MAX(quantity * price) AS max_sales
FROM sales;-- 查找每個產品的最小和最大銷售額
SELECT product_name, MIN(quantity * price) AS min_sales, MAX(quantity * price) AS max_sales
FROM sales
GROUP BY product_name;

輸出結果:

+-----------+-----------+
| min_sales | max_sales |
+-----------+-----------+
|     10.00 |     26.25 |
+-----------+-----------++--------------+-----------+-----------+
| product_name | min_sales | max_sales |
+--------------+-----------+-----------+
| Apple        |     15.00 |     22.50 |
| Banana       |     10.00 |     12.50 |
| Orange       |     22.50 |     26.25 |
+--------------+-----------+-----------+

6. 使用GROUP_CONCAT()合并字符串

-- 合并所有產品的名稱
SELECT GROUP_CONCAT(product_name) AS all_products FROM sales;-- 合并每個銷售日期的產品名稱
SELECT sale_date, GROUP_CONCAT(product_name) AS products_sold
FROM sales
GROUP BY sale_date;

輸出結果:

+---------------------------+
| all_products              |
+---------------------------+
| Apple,Banana,Apple,Banana,Orange,Orange |
+---------------------------++------------+---------------------+
| sale_date  | products_sold       |
+------------+---------------------+
| 2023-01-01 | Apple,Banana        |
| 2023-01-02 | Apple,Banana        |
| 2023-01-03 | Orange              |
| 2023-01-04 | Orange              |
+------------+---------------------+

7. 使用STD()VARIANCE()計算標準差和方差

-- 計算所有銷售額的標準差和方差
SELECT STD(quantity * price) AS std_sales, VARIANCE(quantity * price) AS variance_sales
FROM sales;-- 計算每個產品銷售額的標準差和方差
SELECT product_name, STD(quantity * price) AS std_sales, VARIANCE(quantity * price) AS variance_sales
FROM sales
GROUP BY product_name;

輸出結果:

+------------+----------------+
| std_sales  | variance_sales |
+------------+----------------+
|   6.614378 |      43.750000 |
+------------+----------------++--------------+------------+----------------+
| product_name | std_sales  | variance_sales |
+--------------+------------+----------------+
| Apple        |   3.750000 |      14.062500 |
| Banana       |   1.250000 |       1.562500 |
| Orange       |   1.875000 |       3.515625 |
+--------------+------------+----------------+

8. 使用BIT_AND()BIT_OR()BIT_XOR()進行位運算

-- 計算quantity列的按位與、按位或和按位異或
SELECT BIT_AND(quantity) AS bit_and, BIT_OR(quantity) AS bit_or, BIT_XOR(quantity) AS bit_xor
FROM sales;

輸出結果:

+---------+--------+---------+
| bit_and | bit_or | bit_xor |
+---------+--------+---------+
|       0 |     35 |      15 |
+---------+--------+---------+

四、總結

通過本文的介紹和案例,我們詳細了解了MySQL中常見的聚合函數及其使用場景。這些聚合函數在數據分析和統計中非常有用,能夠幫助我們快速獲取數據的匯總信息。掌握這些聚合查詢的技巧,將使你在數據庫操作中更加得心應手。

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

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

相關文章

調研:如何實現智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目錄 調研:如何實現智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)一、交互流程二、數據流程三、架構分類四、開源產品4.1 AutoCoder(知識庫變體)4.2 FastGPT(…

【Vue CLI腳手架開發】——6.scoped樣式

文章目錄 一、scoped是什么二、應用案例1.使用代碼2.原理3父組件App未添加scoped影響 一、scoped是什么 我們知道vue為了防止css樣式污染&#xff0c;在每個組件中提供了 scoped屬性進行限定css作用域&#xff1b;當<style>標簽有 scoped 屬性時&#xff0c;它的 CSS 只…

高精算法的用法及其優勢

高精度問題是指當數據的位數非常大&#xff08;超出標準數據類型的范圍&#xff09;時&#xff0c;如何進行計算和存儲的問題。常見場景包括大整數的加、減、乘、除、取模等操作。以下是解決高精度問題的常用方法與技巧&#xff1a; 一、數據存儲 數組存儲 用整型數組存儲&am…

VM+CentOS虛擬機

關于VMCentOS虛擬機的配置和使用&#xff0c;可以參考以下博客中的詳細教程&#xff1a; **一、VMCentOS虛擬機配置** 1. **虛擬機網絡配置** - 在VMware中&#xff0c;點擊“編輯”→“虛擬網絡編輯器”&#xff0c;選擇VMnet8并進行相關設置。 - 子網IP可以改成如192.168.1…

設置 CursorRules 規則

為什么要設置CursorRules&#xff1f; 設置 CursorRules 可以幫助優化代碼生成和開發流程&#xff0c;提升工作效率。具體的好處包括&#xff1a; 1、自動化代碼生成 &#xff1a;通過定義規則&#xff0c;Cursor 可以根據你的開發需求自動生成符合規定的代碼模板&#xff0c…

pip install速度太慢的多種解決方案

目錄 問題描述為什么 pip 速度這么慢&#xff1f;解決方案1. 使用國內鏡像源2. 配置多個鏡像源3. 使用第三方工具4. 手動下載后本地安裝5. 優化網絡環境6. 更新 pip 版本 測試效果 問題描述 在使用 Python 進行開發時&#xff0c;我們經常需要使用 pip 來安裝第三方庫。然而&am…

Java阻塞隊列深度解析:高并發場景下的安全衛士

一、阻塞隊列的核心價值 在電商秒殺系統中&#xff0c;瞬時涌入的10萬請求如果直接沖擊數據庫&#xff0c;必然導致系統崩潰。阻塞隊列如同一個智能緩沖帶&#xff0c;通過流量削峰和異步解耦兩大核心能力&#xff0c;成為高并發系統的核心組件。 二、Java阻塞隊列實現類對比 …

基于RapidOCR與DeepSeek的智能表格轉換技術實踐

基于RapidOCR與DeepSeek的智能表格轉換技術實踐 一、技術背景與需求場景 在金融分析、數據報表處理等領域&#xff0c;存在大量圖片格式的表格數據需要結構化處理。本文介紹基于開源RapidOCR表格識別與DeepSeek大模型的智能轉換方案&#xff0c;實現以下典型場景&#xff1a; …

django中視圖作用和視圖功能 以及用法

在 Django REST Framework(DRF)中,視圖(View)是處理 HTTP 請求并返回響應的核心組件。DRF 提供了多種視圖類,適用于不同的場景和需求。以下是 DRF 中常見的視圖類及其作用、使用方法的詳細說明: 一、DRF 視圖的分類 DRF 的視圖可以分為以下幾類: 基于函數的視圖(Func…

希音(Shein)前端開發面試題集錦和參考答案

用 Node 寫過什么工具或 npm 包 在實際開發中,使用 Node 編寫過多種實用工具和 npm 包。 自動化構建工具 開發了一個簡單的自動化構建工具,用于處理前端項目的資源壓縮和合并。在前端項目中,為了優化性能,需要對 CSS 和 JavaScript 文件進行壓縮,減少文件體積,同時將多個…

C語言100天練習題【記錄本】

C語言經典100題&#xff08;手把手 編程&#xff09; 可以在嗶哩嗶哩找到 已解決的天數&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六 下面的都是模模糊糊的 可以學學這些算法&#xff0c;我是算法白癡&#xff0c;但是我不是白癡&#xff0c;可以學&#xff…

迷你世界腳本文字板接口:Graphics

文字板接口&#xff1a;Graphics 彼得兔 更新時間: 2024-08-27 11:12:18 具體函數名及描述如下: 序號 函數名 函數描述 1 makeGraphicsText(...) 創建文字板信息 2 makeflotageText(...) 創建漂浮文字信息 3 makeGraphicsProgress(...) 創建進度條信息…

Crawl4AI: 賦能AI用戶的開源智能網頁爬蟲與數據提取

Crawl4AI: 賦能AI用戶的開源智能網頁爬蟲與數據提取 在當今人工智能時代&#xff0c;網絡爬蟲扮演著至關重要的角色。它們不僅是數據收集的強大工具&#xff0c;更是驅動機器學習、自然語言處理等技術發展的關鍵引擎。 然而&#xff0c;對于用戶來說&#xff0c;在面對復雜多…

下載b站視頻音頻

文章目錄 方案一&#xff1a;jjdown如何使用 方案二&#xff1a;bilibili嗶哩嗶哩下載助手如何使用進入插件網站插件下載插件安裝 使用插件下載視頻音頻&#xff1a;復制音頻下載地址 方案三&#xff1a;bat命令下載單個音頻下載單個視頻下載單個音視頻 方案一&#xff1a;jjdo…

【Git】linux搭建Gitea配置mysql數據庫

WindowsServer搭建內網Gitea【中文更方便使用】 1. 安裝Gitea # 下載 wget https://dl.gitea.io/gitea/1.23.5/gitea-1.23.5-linux-amd642. 創建用戶 # 創建 gitea 用戶 sudo adduser --system --shell /bin/bash --comment Git Version Control --create-home --home-dir /…

AI繪畫軟件Stable Diffusion詳解教程(6):文生圖、提示詞細說與繪圖案例

文生圖即以文字描述來生成圖像&#xff0c;這是目前所有AI繪畫軟件的基本功能之一。要想畫一副好的圖片&#xff0c;除了選擇好的模型&#xff0c;在文生圖中&#xff0c;提示詞特別關鍵。 一、什么是提示詞&#xff08;Prompt&#xff09; 提示詞又稱創意、關鍵詞、咒語、ca…

MATLAB實現遺傳算法優化風電_光伏_光熱_儲熱優化

1. 問題定義 目標&#xff1a;最小化輸出負荷與需求負荷的偏差平方和。決策變量&#xff1a;每個時間步長的風電、光伏、光熱和儲熱輸出功率。約束條件&#xff1a; 風電、光伏、光熱的輸出功率不得超過其最大容量。儲熱系統的輸出功率&#xff08;充放電&#xff09;不得超過…

Ubuntu20.04本地配置IsaacLab 4.2.0的G1訓練環境(一)

Ubuntu20.04本地配置IsaacLab的G1訓練環境&#xff08;一&#xff09; 配置Omniverse環境配置IsaacSim配置IsaacLab 寫在前面&#xff0c;如果Ubuntu剩余空間低于60G&#xff0c;則空間不足&#xff0c;除非你不需要資產包。但資產包中卻包含了G1模型、Go2模型等機器人模型和代…

Linux文管讀寫書簽

文件&#xff1a;~/.config/gtk-3.0/bookmarks 格式&#xff1a;file://路徑 名稱&#xff0c;每個一行。 QTreeWidgetItem清空item所有子節點 讀取書簽 void MainWindow::genBookmark() {QString fp QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) &…

芋道打包時報錯:缺失@unocss插件

在遇到打包時&#xff0c;報這個錯誤&#xff0c;提示構建失敗是因為 ESLint 在加載 unocss 插件時&#xff0c;找不到 unocss/eslint-plugin 模塊 解決辦法&#xff1a;安裝缺失的依賴&#xff1a;保證unocss/eslint-plugin已經被正確安裝&#xff0c; 使用以下命令安裝&…