MySQL必知必會 —— 第十二章 彙總數據

彙總數據

1. 聚集函數

MySQL查詢可用於檢索數據,以便分析和報表生成。這種類型的檢索例子有以下幾種。
❑ 確定表中行數(或者滿足某個條件或包含某個特定值的行數)。
❑ 獲得表中行組的和。
❑ 找出表列(或所有行或某些特定的行)的最大值、最小值和平均值。

聚集函數(aggregate function) 運行在行組上,計算和返回單個值的函數。
SQL聚集函數
在這裏插入圖片描述

1.1 avg()函數

使用AVG()返回products表中所有產品的平均價格:

select avg(prod_price) as avg_price
from products; 

在這裏插入圖片描述
只用於單個列 AVG()只能用來確定特定數值列的平均值,而且列名必須作爲函數參數給出。爲了獲得多個列的平均值,必須使用多個AVG()函數。

NULL值 AVG()函數忽略列值爲NULL的行。

1.2 count() 函數

COUNT()函數進行計數。可利用COUNT()確定表中行的數目或符合特定條件的行的數目。
COUNT()函數有兩種使用方式。
❑ 使用COUNT(*)對錶中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值。
❑ 使用COUNT(column)對特定列中具有值的行進行計數,忽略NULL值。

案例一 返回customers表中客戶的總數

select count(*) as num_cust
from customers;

在這裏插入圖片描述
案例二 只對具有電子郵件地址的客戶計數

select count(cust_email) as num_cust
from customers;

在這裏插入圖片描述
NULL值 如果指定列名,則指定列的值爲空的行被COUNT()函數忽略,但如果COUNT()函數中用的是星號(*),則不忽略。

1.3 max() 函數

MAX()返回指定列中的最大值。MAX()要求指定列名,如下所示:

select max(prod_price) as max_price
from products;

在這裏插入圖片描述

1.4 min() 函數

MIN()的功能正好與MAX()功能相反,它返回指定列的最小值

select min(prod_price) as min_price
from products;

在這裏插入圖片描述
對非數值數據使用MIN() 和MAX() MIN()函數與MAX()函數類似,MySQL允許將它用來返回任意列中的最小值,包括返回文本列中的最小值。在用於文本數據時,如果數據按相應的列排序,則MIN()返回最前面的行。
NULL值 MIN()函數和MAX()函數忽略列值爲NULL的行。

1.5 sum() 函數

SUM()用來返回指定列值的和(總計)
檢索所訂購物品的總數(所有quantity值之和)

select sum(quqntity) as items_ordered
from orderitems
where order_num = 20005;

在這裏插入圖片描述
在多個列上進行計算 所有聚集函數都可用來執行多個列上的計算。
NULL值 SUM()函數忽略列值爲NULL的行。

2 聚集不同值

以上5個聚集函數都可以如下使用:
❑ 對所有的行執行計算,指定ALL參數或不給參數(因爲ALL是默認行爲);
❑ 只包含不同的值,指定DISTINCT參數。
ALL爲默認 ALL參數不需要指定,因爲它是默認行爲。如果不指定DISTINCT,則假定爲ALL。

下面的例子使用AVG()函數返回特定供應商提供的產品的平均價格。它與上面的SELECT語句相同,但使用了DISTINCT參數,因此平均值只考慮各個不同的價格:

select avg(distinct prod_price) as avg_price
from products
where vend_id = 1003;

在這裏插入圖片描述
注意 如果指定列名,則DISTINCT只能用於COUNT()。DISTINCT不能用於COUNT(*),因此不允許使用COUNT(DISTINCT),否則會產生錯誤。類似地,DISTINCT必須使用列名,不能用於計算或表達式。
將DISTINCT用於MIN()和MAX() 雖然DISTINCT從技術上可用於MIN()和MAX(),但這樣做實際上沒有價值。一個列中的最小值和最大值不管是否包含不同值都是相同的。

組合聚集函數

select count(*) as num_items,
	min(prod_price) as price_min,
	max(prod_price) as price_max,
	avg(prod_price) as price_avg
from products;

在這裏插入圖片描述
取別名 在指定別名以包含某個聚集函數的結果時,不應該使用表中實際的列名。雖然這樣做並非不合法,但使用唯一的名字會使你的SQL更易於理解和使用(以及將來容易排除故障)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章