對于Java后端開發來說,必須要掌握常用的聚合函數:COUNT,MAX,MIN,SUM,AVG,掌握GROUP BY和HAVING子句的用法,掌握Where和HAVING的區別:
? 一、常用聚合函數(聚合函數用于統計匯總數據)
聚合函數 | 作用 | 示例 |
---|---|---|
COUNT() | 統計記錄條數 | SELECT COUNT(*) FROM 表名 |
MAX() | 求最大值 | SELECT MAX(價格) FROM 商品 |
MIN() | 求最小值 | SELECT MIN(價格) FROM 商品 |
SUM() | 求總和 | SELECT SUM(數量) FROM 訂單 |
AVG() | 求平均值 | SELECT AVG(價格) FROM 商品 |
? 二、GROUP BY 子句(用于分組統計)
GROUP BY
將數據按照某個字段進行分組,并配合聚合函數使用。
示例:
SELECT 部門, AVG(薪資)
FROM 員工
GROUP BY 部門;
含義:按“部門”分組,統計每個部門的平均薪資。
? 三、HAVING 子句(對分組后的數據進行過濾)
WHERE
是在 分組前 對原始數據進行過濾。HAVING
是在 分組后 對聚合結果進行過濾。
示例:
SELECT 部門, AVG(薪資) AS 平均薪資
FROM 員工
GROUP BY 部門
HAVING AVG(薪資) > 8000;
含義:先按部門分組,再篩選平均薪資大于8000的部門。
? 四、WHERE 和 HAVING 的區別總結:
對比項 | WHERE | HAVING |
---|---|---|
作用階段 | 分組前(原始數據) | 分組后(聚合結果) |
是否能用聚合函數 | ?不能 | ?可以 |
示例 | WHERE 薪資 > 5000 | HAVING AVG(薪資) > 8000 |
? 五、綜合示例
假設我們有一個員工表 employees
:
id | name | department | salary |
---|---|---|---|
1 | 張三 | IT | 8000 |
2 | 李四 | HR | 6000 |
3 | 王五 | IT | 9000 |
4 | 趙六 | HR | 5000 |
5 | 孫七 | Sales | 7000 |
查詢平均工資大于7000的部門及其平均工資:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 7000;