sql將查詢數據生成一張表「sql分組查詢和聚合查詢的區別」

1 分組聚合的原因

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

SQL分組函數和聚合函數的幾點說明

拿上圖中的數據進行解釋,假設按照product_type這個欄位進行分組,分組之後結果如下圖。

SELECT product_type from product
group by product_type
SQL分組函數和聚合函數的幾點說明

從圖中可以看出被分為了三組,分別為廚房用具、衣服和辦公用品,就相當於對product_type這個欄位進行了去重,確實group by函數有去重的作用。

SELECT DISTINCT product_type from product

假設分組之後,我想看一下價格,也就是sale_price這個欄位的值,按照如下這個寫法,會報如下錯誤。

SELECT product_type,sale_price from product
group by product_type
SQL分組函數和聚合函數的幾點說明

這是為什麼呢?原表按照product_type分組之後,廚房用具對應4個值,衣服對應2個值,辦公用品對應2個值,這就是在取sale_price這個欄位的時候為什麼報錯了,一個空格中不能填入多個值,這時候就可以用聚合函數了,比如求和,求平均,求最大最小值,求行數。聚合之後的值就只有一個值了。

SQL分組函數和聚合函數的幾點說明
SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from product
group by product_type
SQL分組函數和聚合函數的幾點說明

對於多個欄位的分組,其原理是一樣的。從上述中記住兩點:分組去重和分組聚合。

2 distinct和group by去重的區別

  • Distinct 和group by 設計時側重點不一樣

distinct只是為了去重,而group by是為了聚合統計的。

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

單個欄位去重

--DISTINCT
SELECT distinct product_type from product
--GROUP BY
select product_type from product
GROUP BY product_type
SQL分組函數和聚合函數的幾點說明

多個欄位去重

--DISTINCT
SELECT distinct product_name, product_type from product
--GROUP BY
select product_name, product_type from product
GROUP BY product_name, product_type
SQL分組函數和聚合函數的幾點說明

執行效率

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

from<表名>
where 查詢條件
group by 分組類別
having 對分組結果指定條件

order by <列名> (desc)
limit 數字
SQL分組函數和聚合函數的幾點說明

SQL語言的運行順序,先執行上圖中的第一步,然後再執行select子句,最後對結果進行篩選。distinct是在select子句中,而group by在第一步中,所以group by去重比distinct去重在效率上要高。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/253000.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-14 02:24
下一篇 2024-12-14 02:24

相關推薦

發表回復

登錄後才能評論