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 |