首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 常用 SQL 函數詳解:聚合、分組、連接與集合運算

     編輯:MySQL 綜合教學

MySQL 常用 SQL 函數詳解:聚合、分組、連接與集合運算

掌握 SQL 內建函數是高效查詢與報表分析的基石。本文系統整理 COUNT、GROUP BY、HAVING、AVG、各類 JOIN 以及 UNION 的語法、差異與實戰範例。

一、聚合函數 COUNT

-- 統計總行數(包含 NULL)
SELECT COUNT(*) FROM tableName;

-- 統計指定欄位非 NULL 值個數
SELECT COUNT(column_name) FROM tableName;

-- 統計指定欄位不重複值個數
SELECT COUNT(DISTINCT column_name) FROM tableName;

關鍵差異: COUNT(column) 忽略 NULL;COUNT(DISTINCT column) 去重後計數。

二、分組查詢 GROUP BY

依一或多欄位分組,常搭配聚合函數(SUM、AVG、MAX、MIN、COUNT)使用:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

三、分組過濾 HAVING

WHERE 無法搭配聚合函數,HAVING 專門過濾分組後的結果:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

實戰範例

資料表 tt:

資料表 tt 範例資料

資料表 tt2:

資料表 tt2 範例資料

需求:統計 tt 中各 name 下 tt_value 之和,且總和 ≥ 20:

SELECT name, SUM(tt_value)
FROM tt
GROUP BY name
HAVING SUM(tt_value) >= 20;

HAVING 查詢結果

執行順序: WHERE → GROUP BY → 聚合函數 → HAVING

四、平均值 AVG

SELECT AVG(column_name) FROM table_name;

查詢 tt_value 大於平均值的記錄:

SELECT * FROM tt
WHERE tt_value > (SELECT AVG(tt_value) FROM tt);

平均值為 35,結果如下:

大於平均值的記錄

五、多表連接 JOIN

依連接方式分為四類:

類型說明
INNER JOIN僅回傳雙方皆有匹配的行(交集)
LEFT JOIN回傳左表所有行,右表無匹配則為 NULL
RIGHT JOIN回傳右表所有行,左表無匹配則為 NULL
FULL JOIN回傳雙方所有行(並集),MySQL 需用 UNION 模擬

圖解說明

INNER JOIN(交集):

INNER JOIN 示意圖

LEFT JOIN(左表全保留):

LEFT JOIN 示意圖

RIGHT JOIN(右表全保留):與 LEFT JOIN 相反。

FULL JOIN(並集):LEFT JOIN ∪ RIGHT JOIN。

六、集合運算 UNION / UNION ALL

-- 合併並去重、預設排序
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;

-- 合併保留重複、不排序、效能較好
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;

實戰對比

SELECT name, status FROM tt
UNION
SELECT name, status FROM tt2;

UNION 結果:去重且排序

SELECT name, status FROM tt
UNION ALL
SELECT name, status FROM tt2;

UNION ALL 結果:保留重複

效能提示: UNION 需排序去重,效能低於 UNION ALL;若確定無重複或允許重複,優先用 UNION ALL。

七、總結速查表

功能關鍵字典型場景
計數COUNT(*) / COUNT(col) / COUNT(DISTINCT col)統計總筆數、非空筆數、唯一值數
分組GROUP BY依維度彙總(如部門薪資總和)
分組過濾HAVING保留銷售額 > 100萬的部門
平均AVG計算平均分、平均薪資
內連接INNER JOIN只需雙方都有資料的情況
左連接LEFT JOIN主表全保留,附表可能為空
合併去重UNION合併多張同結構表、報表彙總
合併保留重複UNION ALL日誌合併、大量資料高效匯總

熟練運用這些函數與子句,能讓複雜報表查詢變得簡潔高效,是 SQL 進階的必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved