SQL分組函數(shù)和聚合函數(shù)的幾點(diǎn)說明

1 分組聚合的原因

SQL中分組函數(shù)和聚合函數(shù)之前的文章已經(jīng)介紹過,單說這兩個(gè)函數(shù)有可能比較好理解,分組函數(shù)就是group by,聚合函數(shù)就是COUNT、MAX、MIN、AVG、SUM。

image-20201129160054748

拿上圖中的數(shù)據(jù)進(jìn)行解釋,假設(shè)按照product_type這個(gè)字段進(jìn)行分組,分組之后結(jié)果如下圖。

SELECT product_type from product
group by product_type
image-20201129160549529

從圖中可以看出被分為了三組,分別為廚房用具、衣服和辦公用品,就相當(dāng)于對(duì)product_type這個(gè)字段進(jìn)行了去重,確實(shí)group by函數(shù)有去重的作用。

SELECT DISTINCT product_type from product

假設(shè)分組之后,我想看一下價(jià)格,也就是sale_price這個(gè)字段的值,按照如下這個(gè)寫法,會(huì)報(bào)如下錯(cuò)誤。

SELECT product_type,sale_price from product
group by product_type
image-20201129164214376

這是為什么呢?原表按照product_type分組之后,廚房用具對(duì)應(yīng)4個(gè)值,衣服對(duì)應(yīng)2個(gè)值,辦公用品對(duì)應(yīng)2個(gè)值,這就是在取sale_price這個(gè)字段的時(shí)候?yàn)槭裁磮?bào)錯(cuò)了,一個(gè)空格中不能填入多個(gè)值,這時(shí)候就可以用聚合函數(shù)了,比如求和,求平均,求最大最小值,求行數(shù)。聚合之后的值就只有一個(gè)值了。

image-20201129163008895
SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from product
group by product_type

image-20201129164033715

對(duì)于多個(gè)字段的分組,其原理是一樣的。從上述中記住兩點(diǎn):分組去重和分組聚合。

2 distinct和group by去重的區(qū)別

  • Distinct 和group by 設(shè)計(jì)時(shí)側(cè)重點(diǎn)不一樣

distinct只是為了去重,而group by是為了聚合統(tǒng)計(jì)的。

  • 兩者都有去重的效果,但是執(zhí)行的效率不一樣

單個(gè)字段去重

--DISTINCT
SELECT distinct product_type from product
--GROUP BY
select product_type from product
GROUP BY product_type
image-20201129173357923

多個(gè)字段去重

--DISTINCT
SELECT distinct product_name, product_type from product
--GROUP BY
select product_name, product_type from product
GROUP BY product_name, product_type
image-20201129173616585

執(zhí)行效率

select <列名1>,<列名2>

from<表名>
where 查詢條件
group by 分組類別
having 對(duì)分組結(jié)果指定條件

order by <列名> (desc)
limit 數(shù)字
image-20201129174649616

SQL語言的運(yùn)行順序,先執(zhí)行上圖中的第一步,然后再執(zhí)行select子句,最后對(duì)結(jié)果進(jìn)行篩選。distinct是在select子句中,而group by在第一步中,所以group by去重比distinct去重在效率上要高。

文章持續(xù)更新,可以微信搜索「 大數(shù)據(jù)分析師知識(shí)分享」第一時(shí)間閱讀,回復(fù)【666】獲取大數(shù)據(jù)相關(guān)資料。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容