《SQL 必知必會》讀書筆記 -- 第9課 彙總數據 9.1 聚集函數:對某些行運行的函數,計算並返回一個值 案例: -- 確定表中函數 -- 獲得表中某些行的和 -- 找出表列的最大值、最小值和平均值等 --當我們實際想要彙總信息,而不是需要數據本身時,可節省時間和帶寬。 --表9-1 --函數 ...
《SQL 必知必會》讀書筆記 -- 第9課 彙總數據
9.1 聚集函數:對某些行運行的函數,計算並返回一個值
案例:
-- 確定表中函數
-- 獲得表中某些行的和
-- 找出表列的最大值、最小值和平均值等
--當我們實際想要彙總信息,而不是需要數據本身時,可節省時間和帶寬。
--表9-1
--函數 說明
--AVG() 返回某列的平均值
--COUNT() 返回某列的行數
--MAX() 返回某列的最大值
--MIN() 返回某列的最小值
--SUM() 返回某列值之和
9.1.1 AVG() 函數:返回某列的平均值
1 SELECT AVG(prod_price) AS avg_price 2 FROM dbo.Products; 4 --分析:此 avg_price 包含 Products 表中所有產品的平均價格
SELECT AVG(prod_price) AS avg_price FROM dbo.Products WHERE vend_id = 'DLL01'; --分析:WHERE 過濾出 vend_id 為 DLL01 的產品,因此 avg_price 返回的值只是該供應商產品的平均值
【註意】AVG() 函數忽略列值為 NULL 的行
9.1.2 COUNT() 函數:確定表中行的數目或符合特定條件的行的數目
-- 使用方式:
-- 使用 COUNT(*) 對錶中行的數目進行技術,不管表列中包含的是空值(NULL)還是非空值
-- 使用 COUNT(column) 對特定列中具有值的行進行計數,忽略 NULL 值
SELECT COUNT(*) AS num_cust FROM dbo.Customers; --返回Customers表中的顧客數
SELECT COUNT(cust_email) AS num_cust FROM dbo.Customers; --這裡只對具有電子郵件地址的客戶進行計數,結果為3,表示5個顧客中只有3個顧客有電子郵件 --分析:因為這裡指定了列名,COUNT()會忽略指定列的值為空的行
9.1.3 MAX() 函數:返回指定列中的最大值
--要求:指定列名
SELECT MAX(prod_price) AS max_price FROM dbo.Products; --返回的是Products表中最貴重的物品的價格
【註意】MAX() 忽略列值為NULL的行
9.1.4 MIN() 函數:與 MAX() 相反,返回指定列的最小值。
--要求:指定列名
SELECT MIN(prod_price) AS min_price FROM dbo.Products; --返回的是Products表中最便宜的物品的價格
【註意】MIN() 忽略列值為 NULL 的行
9.1.5 SUM() 函數:返回指定列值的總和(總計)
SELECT SUM(quantity) AS items_ordered FROM dbo.OrderItems WHERE order_num = 20005; --分析:SUM(quantity)返回訂單中所有物品數量之和,WHERE 子句保證只統計某個物品訂單中的物品
SELECT SUM(item_price*quantity) AS total_price FROM dbo.OrderItems WHERE order_num = 20005; --分析:SUM(item_price*quantity) 返回訂單中所有物品價錢之和,WHERE 子句保證值統計某個物品訂單中的物品
【註意】SUM() 忽略列值為 NULL 的行
9.2 聚集不同的值
--以上5個聚集函數都可以使用:DISTINCT 參數,只包含不同的值
SELECT AVG(DISTINCT prod_price) AS avg_price FROM dbo.Products WHERE vend_id = 'DLL01'; --因為使用了 DISTINCT 參數,因此平均值只考慮各個不同的價格
【註意】DISTINCT 不能用於 COUNT(*) ,但可用於 COUNT(column)
【提示】雖可用於 MIN() 和 MAX() ,但這樣沒有實際價值
9.3 組合聚集函數
SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg FROM dbo.Products; --使用單條SELECT語句執行了4個聚集計算,返回4個值(Products表中物品的數目,產品價格的最高值、最低值以及平均值) --使用聚集函數建議取別名讓數據更清晰