SQL讀書筆記(五)

參考書籍爲SQL必知必會,一下筆記是我在讀書時的一些摘錄。希望能幫到各位道友

SQL的聚集函數,如何利用它們彙總表的數據

1、聚集函數

我們經常需要彙總數據而不用把它們實際檢索出來,爲此SQL提供了專門的函數。使用這些函數,SQL查詢可用於檢索數據,以便分析和報表生成。這種類型的檢索例子有:
確定表中行數(或者滿足某個條件或包含某個特定值的行數); 獲得表中某些行的和; 找出表列(或所有行或某些特定的行)的最大值、最小值、平均值。

函數   說明
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

SELECT AVG(prod_price) AS avg_price FROM Products;

此SELECT語句返回值avg_price,它包含Products表中所有產品的平均價格

SELECT AVG(prod_price) AS avg_price FROM Products WHERE vend_id = ‘DLL01’;

這條SELECT語句與前一條的不同之處在於,它包含了WHERE子句。此WHERE子句僅過濾出vend_id爲DLL01的產品,因此avg_price中返回的 值只是該供應商產品的平均值。

SELECT COUNT(*) AS num_cust FROM Customers;

在此例子中,利用COUNT(*)對所有行計數,不管行中各列有什麼值。計數值在num_cust中返回。

下面的例子只對具有電子郵件地址的客戶計數:

SELECT COUNT(cust_email) AS num_cust FROM Customers;

SELECT MAX(prod_price) AS max_price FROM Products;

這裏,MAX()返回Products表中最貴物品的價格。

提示:對非數值數據使用MAX() 雖然MAX()一般用來找出最大的數值或日期值,但許多(並非所有)DBMS允許將它用來返回任意列中的最大值,包括返回文本列中的最大 值。在用於文本數據時,MAX()返回按該列排序後的最後一行。

說明:MAX()函數忽略列值爲NULL的行。

SELECT MIN(prod_price) AS min_price FROM Products;

其中MIN()返回Products表中最便宜物品的價格。

提示:對非數值數據使用MIN() 雖然MIN()一般用來找出最小的數值或日期值,但許多(並非所有)DBMS允許將它用來返回任意列中的最小值,包括返回文本列中的最小 值。在用於文本數據時,MIN()返回該列排序後最前面的行。
說明:MIN()函數忽略列值爲NULL的行。

SELECT SUM(quantity) AS items_ordered FROM OrderItems WHERE order_num = 20005;

函數SUM(quantity)返回訂單中所有物品數量之和,WHERE子句保證只統計某個物品訂單中的物品。

SUM()也可以用來合計計算值。在下面的例子中,合計每項物品的item_price*quantity,得出總的訂單金額:

SELECT SUM(item_price*quantity) AS total_price FROM OrderItems WHERE order_num = 20005;

2、聚集不同值
對所有行執行計算,指定ALL參數或不指定參數(因爲ALL是默認行爲)。 只包含不同的值,指定DISTINCT參數。

SELECT AVG(DISTINCT prod_price) AS avg_price FROM Products WHERE vend_id = ‘DLL01’;

可以看到,在使用了DISTINCT後,此例子中的avg_price比較高,因爲有多個物品具有相同的較低價格。排除它們提升了平均價格。

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 Products

num_items price_min price_max p rice_avg
———- ————— ————— ——–
9 3.4900 11.9900 6.823333

發佈了83 篇原創文章 · 獲贊 68 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章