05_MySQL常見函數_分組函數


# 分組函數
/*
功能: 統計,又稱為聚合函數,統計函數,組函數
傳入一組值,統計后得到一個值

分類:
sum 求和,avg 平均值,max 最大值,min 最小值,count 計算個數

特點:
1. sum,avg處理數值型
    max,min,count處理任何類型

2. 是否忽略null值
分組函數都忽略null值,不參與統計

3. 可以和distinct搭配,先去重再計算

4、count函數的詳細介紹
count(x) x字段的非null行數
count(*) 表的總行數(一行中只要有1個字段不為null, 則計入)
count(常量) 表的總行數(相當於表中增加1列,值為給定的常量

統計效率:
存儲引擎為myisam, count(*)效率最好,有1個內部計數器直接保存了count(*)
存儲引擎為innodb, count(*)和count(1)類似,但比count('常量字段')效率高(要判斷null)

5、和分組函數一同查詢的字段有限制(返回的邏輯表,結構要規則)
要求是group by后的字段(邏輯表要規則)


*/

# 1、簡單的使用
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT COUNT(salary) FROM employees;

SELECT SUM(salary) AS 和, TRUNCATE(AVG(salary),4) 平均, MAX(salary) 最大
FROM employees;

# 2、參數支持哪些類型
# sum,avg: 數值類型才有意義
# max,min: 數值類型,字符型(字典順序), 日期型
# count: 數值,字符,日期型(非null的個數)
SELECT MAX(hiredate),MIN(hiredate) FROM employees;
SELECT COUNT(last_name), COUNT(commission_pct) FROM employees; # 107,35

# 3、是否忽略null值

# 忽略null值
SELECT SUM(commission_pct), AVG(commission_pct)FROM employees;

# 忽略null值
SELECT MAX(commission_pct), MIN(commission_pct) FROM employees;

# 4、和distinct搭配(去重統計)
SELECT SUM(DISTINCT salary), SUM(salary) FROM employees; # 先去重再求和

SELECT COUNT(DISTINCT salary), COUNT(salary) FROM employees; # 先去重再計數

SELECT MAX(DISTINCT salary), MIN(DISTINCT salary) FROM employees; # 先去重


# 5、count的詳細介紹

SELECT COUNT(salary) FROM employees; # salary字段的非null行數

SELECT COUNT(*) FROM employees; # count(*),表的總行數(一行中只要有1個字段不為null, 則計入)

SELECT COUNT(1) FROM employees; # 等價於給表增加了1列1, 統計該列的行數(表的實際行數)

# 6、和分組函數一同查詢的字段有限制
# 邏輯表的結構也要規則(不能1個字段x行,1個字段y行)

# 錯誤實例
SELECT AVG(salary), employee_id FROM employees; # avg只有1行,employee_id有107行,結果肯定有問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM