SQLServer-Day8
AVG 函数
AVG函数但会数值列的平均值,NULL
值不包括在计算中
SELECT AVG(column_name) FROM yable_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 |
例1:计算OrderPrice字段的平均值:
1 | SELECT AVG(OrderPrice) AS OrderAverage FROM Orders |
结果:
| OrderAverage |
|---|
| 950 |
例2:找到OrderPrice值高于OrderPrice平均值的客户
1 | SELECT Curstomer FROM Orders |
结果:
| Customer |
|---|
| Bush |
| Carter |
| Adams |
COUNT函数
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
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:计算客户“Carter”的订单数。
1 | SELECT COUNT(Customer) AS CustimerNilsen FROM Orders |
以上SQL语句的返回结果是2,因为客户Carter共有2个订单。
| CustomerNilsen |
|---|
| 2 |
例2:
1 | SELECT COUNT(*) AS NumberOfOrders FROM Orders |
结果:
| NumberOfOrders |
|---|
| 6 |
这是表中的总行数。
例3:计算”Orders”表中不同客户的数目
1 | SELECT COUNT(DISTINCT Customer) AS NumberOdCustomers FROM Orders |
结果:
| NumberOfCustomers |
|---|
| 3 |
FIRST()函数
FIRST()函数返回指定的字段中第一个记录的值。
**Tips:**可使用ORDER BY 语句对记录进行排序
SELECT FIRST(column_name) FROM table_name
实例:Orders表同上,查找“OrderPrice”列的第一个值
1 | SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders |
结果类似这样:
| FirstOrderPrice |
|---|
| 1000 |
LAST()函数
LAST()函数返回指定的字段中最后一个记录的值
**Tips:**可使用ORDER BY 语句对记录进行排序
SELECT LAST(column_name) FROM table_name
例:查找”OrderPrice“列的最后一个值
1 | SELECT LAST(OrderPrices) AS LastOrderPrice FROM Orders |
结果:
| LastOrderPrice |
|---|
| 100 |
MAX() 和 MIN() 函数
MAX函数返回一列中的最大值,MIN函数返回一列中的最小值。NULL值不包括在计算中
SELECT MAX(column_name) FROM table_name
注释:MIN和MAX也可用于文本列,以获得按字母顺序排序的最高或者最低值
Orders表:
例:我们要查找”OrderPrice“列中的最大值
1 | SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders |
结果:
| LargestOrderPrice |
|---|
| 2000 |
1 | SELECT MIN(OrderPrice) AS LargestOrderPrice FROM Orders |
结果:
| SmallestOrderPrice |
|---|
| 100 |
SUM() 函数
SUM函数返回数值列的总数(总额)
SELECT SUM(column_name) FROM table_name
例:我们希望查找“OrderPrice”字段的总数
1 | SELECT SUM(OrderPrice) AS OrderTotal FROM Orders |
结果:
| OrderTotal |
|---|
| 5700 |
GROUP BY语句
合计函数(比如SUM)尝尝需要添加GROUP BY语句
GROUP BY语句用于结合合计函数,根据一个或多个列对结果集进行分组
SQL GROUP BY语法
1 | SELECT column_name, aggregate_function(column_name) |
SQL GROUP BY示例
现在,我们希望查找每个客户的总金额(总订单)
我们想要使用GROUP BY语句对客户进行组合。
1 | SELECT Customer, SUM(OrderPrice) FROM Orders |
结果:
| Customer | SUM(OrderPrice) |
|---|---|
| Bush | 2000 |
| Carter | 1700 |
| Adams | 2000 |
GROUP BY一个以上的列
1 | SELECT Customer, OrderDate, SUM(OrderPrice) FROM Orders |
HAVING子句
在SQL中增加HAVING子句原因是,WHERE关键字无法与合计函数一起使用
1 | SELECT column_name, aggregate_function(column_name) |
例1:我们希望查找订单总金额少于2000的客户
1 | SELECT Customer, SUM(OrderPrice) FROM Orders |
结果:
| Customer | SUM(OrderPrice) |
|---|---|
| Carter | 1700 |
例2:我们希望查找客户“Bush”或“Adams”拥有超过1500的订单总金额
1 | SELECT Customer, SUM(OrderPrice) FROM Orders |
结果:
| Customer | SUM(OrderPrice) |
|---|---|
| Bush | 2000 |
| Adams | 2000 |
UCASE()和LCASE()函数
UCASE函数把字段的值转换为大写,LCASE()函数把字段的值转换为小写
SELECT UCASE(column_name) FROM table_name
”Persons“表
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望选取“LastName”和“FirstName”列的内容,然后把“LastName”列转换为大写
1 | SELECT UCASE(LastName) as LastName, FirstName FROM Persons |
结果:
| LastName | FirstName |
|---|---|
| ADAMS | John |
| BUSH | George |
| CARTER | Thomas |
1 | SELECT LCASE(LastName) as LastName, FirstName FROM Persons |
结果:
| LastName | FirstName |
|---|---|
| adams | John |
| bush | George |
| carter | Thomas |
MID()函数
MID函数用于从文本字段中提取字符
1 | SELECT MID(column_name, start[, length] FROM table_name) |
| 参数 | 描述 |
|---|---|
| column_name | 必需。要提取字符的字段 |
| start | 必需。规定开始位置(起始值是1) |
| length | 可选。要返回的字符数。如果省略,则MID()函数返回剩余文本 |
Persons表
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
例1:我们希望从“City”列中提出前3个字符。
1 | SELECT MID(City, 1, 3) as SmallCity Persons |
| SmallCity |
|---|
| Lon |
| New |
| Bei |
LEN()函数
LEN函数返回文本字段中值的长度
SELECT LEN(column_name) FROM table_name
Persons表同上:
1 | SELECT LEN(City) AS LengthOfCity FROM Persons |
结果:
| LengthOfCity |
|---|
| 6 |
| 8 |
| 7 |
ROUND()函数
ROUND函数用于把数值字段舍入为指定的小数位数
SELECT ROUND(column_name, decimals) FROM table_name
| 参数 | 描述 |
|---|---|
| column_name | 必需。要舍入的字段 |
| decimals | 必需。规定要返回的小数位数 |
Products表
| Prod_Id | ProductName | Unit | UnitPrice |
|---|---|---|---|
| 1 | gold | 1000 g | 32.35 |
| 2 | silver | 1000 g | 11.56 |
| 3 | copper | 1000 g | 6.85 |
例:把名称和价格舍入为最接近的整数
1 | SELECT ProductName, ROUND(UnitPrice, 0) AS UnitPrice FROM Products |
结果:
| ProductName | UnitPrice |
|---|---|
| gold | 32 |
| silver | 12 |
NOW()函数
NOW函数返回当前的日期和时间
**Tips:**如果您在使用SQL Server数据库,请使用getdate()函数来获得当前的日期时间。
SELECT NOW() FROM table_name
例:表格同上,要求显示当天的日期所对应的名称和价格
1 | SELECT ProfuctName, UnitPrice, NOW() as PerDate FROM Products |
结果:
| ProductName | UnitPrice | PerDate |
|---|---|---|
| gold | 32.35 | 12/29/2008 11:36:05 AM |
| silver | 11.56 | 12/29/2008 11:36:05 AM |
| copper | 6.85 | 12/29/2008 11:36:05 AM |
FORMAT()函数
FORMAT()函数用于对字段的显示进行格式化
SELECT FORMAT(column_name, format) FROM table_name
| 参数 | 描述 |
|---|---|
| column_name | 必需。要规格式化的字段 |
| format | 必需。规定格式。 |
表同上。
例:需要实现每天日期所对应的名称和价格(日期显示的格式为“YYYY-MM-DD”)
1 | SELECT ProductName, UnitPrice, FORMAT(NOW(), 'YYYY-MM-DD') AS PerDate |
结果:
| ProductName | UnitPrice | PerDate |
|---|---|---|
| gold | 32.35 | 12/29/2008 |
| silver | 11.56 | 12/29/2008 |
| copper | 6.85 | 12/29/2008 |