SQL函數1

SQL 擁有很多可用於計數和計算的內建函數。

函數的語法

內建 SQL 函數的語法是:

SELECT function(列) FROM 表

函數的類型

在 SQL 中,基本的函數類型和種類有若干種。函數的基本類型是:

  • Aggregate 函數
  • Scalar 函數

合計函數(Aggregate functions)

Aggregate 函數的操作面向一系列的值,並返回一個單一的值。

註釋:如果在 SELECT 語句的項目列表中的衆多其它表達式中使用 SELECT 語句,則這個 SELECT 必須使用 GROUP BY 語句!

"Persons" table (在大部分的例子中使用過)

Name Age
Adams, John 38
Bush, George 33
Carter, Thomas 28

MS Access 中的合計函數

函數 描述
AVG(column) 返回某列的平均值
COUNT(column) 返回某列的行數(不包括 NULL 值)
COUNT(*) 返回被選行數
FIRST(column) 返回在指定的域中第一個記錄的值
LAST(column) 返回在指定的域中最後一個記錄的值
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)  
STDEVP(column)  
SUM(column) 返回某列的總和
VAR(column)  
VARP(column)  

在 SQL Server 中的合計函數

函數 描述
AVG(column) 返回某列的平均值
BINARY_CHECKSUM  
CHECKSUM  
CHECKSUM_AGG  
COUNT(column) 返回某列的行數(不包括NULL值)
COUNT(*) 返回被選行數
COUNT(DISTINCT column) 返回相異結果的數目
FIRST(column) 返回在指定的域中第一個記錄的值(SQLServer2000 不支持)
LAST(column) 返回在指定的域中最後一個記錄的值(SQLServer2000 不支持)
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)  
STDEVP(column)  
SUM(column) 返回某列的總和
VAR(column)  
VARP(column)  

Scalar 函數

Scalar 函數的操作面向某個單一的值,並返回基於輸入值的一個單一的值。

MS Access 中的 Scalar 函數

函數 描述
UCASE(c) 將某個域轉換爲大寫
LCASE(c) 將某個域轉換爲小寫
MID(c,start[,end]) 從某個文本域提取字符
LEN(c) 返回某個文本域的長度
INSTR(c,char) 返回在某個文本域中指定字符的數值位置
LEFT(c,number_of_char) 返回某個被請求的文本域的左側部分
RIGHT(c,number_of_char) 返回某個被請求的文本域的右側部分
ROUND(c,decimals) 對某個數值域進行指定小數位數的四捨五入
MOD(x,y) 返回除法操作的餘數
NOW() 返回當前的系統日期
FORMAT(c,format) 改變某個域的顯示方式
DATEDIFF(d,date1,date2) 用於執行日期計算

定義和用法

AVG 函數返回數值列的平均值。NULL 值不包括在計算中。

SQL AVG() 語法

SELECT AVG(column_name) FROM table_name

SQL AVG() 實例

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

例子 1

現在,我們希望計算 "OrderPrice" 字段的平均值。

我們使用如下 SQL 語句:

SELECT AVG(OrderPrice) AS OrderAverage FROM Orders

結果集類似這樣:

OrderAverage
950

例子 2

現在,我們希望找到 OrderPrice 值高於 OrderPrice 平均值的客戶。

我們使用如下 SQL 語句:

SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

結果集類似這樣:

Customer
Bush
Carter
Adams

COUNT() 函數返回匹配指定條件的行數。

SQL COUNT() 語法

SQL COUNT(column_name) 語法

COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):

SELECT COUNT(column_name) FROM table_name

SQL COUNT(*) 語法

COUNT(*) 函數返回表中的記錄數:

SELECT COUNT(*) FROM table_name

SQL COUNT(DISTINCT column_name) 語法

COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:

SELECT COUNT(DISTINCT column_name) FROM table_name

註釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。

SQL COUNT(column_name) 實例

我們擁有下列 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望計算客戶 "Carter" 的訂單數。

我們使用如下 SQL 語句:

SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'

以上 SQL 語句的結果是 2,因爲客戶 Carter 共有 2 個訂單:

CustomerNilsen
2
SQL COUNT(*) 實例

如果我們省略 WHERE 子句,比如這樣:

SELECT COUNT(*) AS NumberOfOrders FROM Orders

結果集類似這樣:

NumberOfOrders
6

這是表中的總行數。

SQL COUNT(DISTINCT column_name) 實例

現在,我們希望計算 "Orders" 表中不同客戶的數目。

我們使用如下 SQL 語句:

SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders

結果集類似這樣:

NumberOfCustomers
3

這是 "Orders" 表中不同客戶(Bush, Carter 和 Adams)的數目。

 

FIRST() 函數

FIRST() 函數返回指定的字段中第一個記錄的值。

提示:可使用 ORDER BY 語句對記錄進行排序。

SQL FIRST() 語法

SELECT FIRST(column_name) FROM table_name

SQL FIRST() 實例

我們擁有下面這個 "Orders" 表:

O_Id

OrderDate

OrderPrice

Customer

1

2008/12/29

1000

Bush

2

2008/11/23

1600

Carter

3

2008/10/05

700

Bush

4

2008/09/28

300

Bush

5

2008/08/06

2000

Adams

6

2008/07/21

100

Carter

現在,我們希望查找 "OrderPrice" 列的第一個值。

我們使用如下 SQL 語句:

SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders

結果集類似這樣:

FirstOrderPrice

1000

 

LAST() 函數

LAST() 函數返回指定的字段中最後一個記錄的值。

提示:可使用 ORDER BY 語句對記錄進行排序。

SQL LAST() 語法

SELECT LAST(column_name) FROM table_name

SQL LAST() 實例

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找 "OrderPrice" 列的最後一個值。

我們使用如下 SQL 語句:

SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders

結果集類似這樣:

LastOrderPrice
100

MAX() 函數

MAX 函數返回一列中的最大值。NULL 值不包括在計算中。

SQL MAX() 語法

SELECT MAX(column_name) FROM table_name

註釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。

SQL MAX() 實例

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找 "OrderPrice" 列的最大值。

我們使用如下 SQL 語句:

SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders

結果集類似這樣:

LargestOrderPrice
2000

MIN() 函數

MIN 函數返回一列中的最小值。NULL 值不包括在計算中。

SQL MIN() 語法

SELECT MIN(column_name) FROM table_name

註釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。

SQL MIN() 實例

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找 "OrderPrice" 列的最小值。

我們使用如下 SQL 語句:

SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders

結果集類似這樣:

SmallestOrderPrice
100

SUM() 函數

SUM 函數返回數值列的總數(總額)。

SQL SUM() 語法

SELECT SUM(column_name) FROM table_name

SQL SUM() 實例

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找 "OrderPrice" 字段的總數。

我們使用如下 SQL 語句:

SELECT SUM(OrderPrice) AS OrderTotal FROM Orders

結果集類似這樣:

OrderTotal
5700

合計函數 (比如 SUM) 常常需要添加 GROUP BY 語句。

GROUP BY 語句

GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。

SQL GROUP BY 語法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

SQL GROUP BY 實例

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查找每個客戶的總金額(總訂單)。

我們想要使用 GROUP BY 語句對客戶進行組合。

我們使用下列 SQL 語句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

結果集類似這樣:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

很棒吧,對不對?

讓我們看一下如果省略 GROUP BY 會出現什麼情況:

SELECT Customer,SUM(OrderPrice) FROM Orders

結果集類似這樣:

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

上面的結果集不是我們需要的。

那麼爲什麼不能使用上面這條 SELECT 語句呢?解釋如下:上面的 SELECT 語句指定了兩列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一個單獨的值("OrderPrice" 列的總計),而 "Customer" 返回 6 個值(每個值對應 "Orders" 表中的每一行)。因此,我們得不到正確的結果。不過,您已經看到了,GROUP BY 語句解決了這個問題。

GROUP BY 一個以上的列

我們也可以對一個以上的列應用 GROUP BY 語句,就像這樣:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate

 

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