#1、常見的幾個聚合函數
AVG 平均值 SUM 求和 MAX 最大值 MIN 最小值 * 以上聚合函數自動過濾空值
方差,標准差,中位數
count()
1,作用 計算指定字段在查詢結構中出現的個數 count(1) count(字段) count(*)
注意:計算指定字段出現的個數時,是不計算null值的
那么用哪個效率更高,如果是myinsam存儲引擎,則三者效率相同,都是o1
如果是innoDB 則三者效率 count(*) = count(1)>count(字段)
#2、group by 的使用
分組操作
select 中出現的非組合函數的字段,必須聲明在GROUP BY 中
反之 ,GROUP BY 中聲明的字段可以不出現在select 中
#在GROUP BY中 使用 with rollup 把所有的都計算出來,計算整體的平均。謹慎和 order by 使用 會相互矛盾
#HAVING 的使用
要求1、如果過濾條件中使用了 聚合函數,則必須使用having 來替換where ,否則報錯
要求2、having 必須聲明在group by 的后面
要求3、如果沒有用group by 可以不用having,開發中一般都是配合使用
結論:當過濾條件中有聚合函數時。則此時過濾條件必須聲明在having中
當過濾條件中沒有聚合函數時,則此過濾條件聲明在where中或者having中都可以,但是,建議聲明在where中(效率高,范圍廣)
#sql底層執行原理
語句的完整結構
#sql92語法
select ,,,。,,,。(存在聚合函數)
from ,,,。,,,
where 多表鏈接條件 and 不包含聚合函數的過濾條件
group by ,,,
having 包含聚合函數的過濾條件
order by ,,, desc/asc
limit,,,/,,,
#sql99語法
select ,,,。,,,。(存在聚合函數)
from ,,,join,,,on
where 不包含聚合函數的過濾條件
group by ,,,
having 包含聚合函數的過濾條件
order by ,,, desc/asc
limit,,,/,,,
sql執行過程:
#from ,,,,.,,,-> on --> (left right join) --> where -->group by --> having --> select --> distinct --> order by --> limit
