SQL 高级(9) 函数
函数的语法
内建 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 |
| 函数 | 描述 |
|---|---|
| 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 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值。
SQL AVG 函数
定义和用法 AVG 函数返回数值列的平均值。NULL 值不包括在计算中。SQL AVG() 语法
SELECT AVG(column_name) FROM table_nameSQL 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 |
我们使用如下 SQL 语句:
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders结果集类似这样:
| OrderAverage |
|---|
| 950 |
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)结果集类似这样:
| Customer |
|---|
| Bush |
| Carter |
| Adams |
SQL COUNT() 语法
SQL COUNT(column_name) 语法COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_nameSQL COUNT(*)语法
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_nameSQL 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) 实例
| 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 |
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders WHERE Customer='Carter'以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单:
| CustomerNilsen |
|---|
| 2 |
如果我们省略 WHERE 子句,比如这样:
SELECT COUNT(*) AS NumberOfOrders FROM Orders结果集类似这样:
| NumberOfOrders |
|---|
| 6 |
现在,我们希望计算 "Orders" 表中不同客户的数目。
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders结果集类似这样:
| NumberOfCustomers |
|---|
| 3 |
FIRST() 函数
FIRST() 函数返回指定的字段中第一个记录的值。提示:可使用 ORDER BY 语句对记录进行排序。
SQL FIRST() 语法
SELECT FIRST(column_name) FROM table_nameSQL 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 |
SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders结果集类似这样:
| FirstOrderPrice |
|---|
| 1000 |
LAST() 函数
LAST() 函数返回指定的字段中最后一个记录的值。提示:可使用 ORDER BY 语句对记录进行排序。
SQL LAST() 语法
SELECT LAST(column_name) FROM table_nameSQL LAST(