SQLServer之聚合函数

聚合函数

SQL SERVER中聚合函数主要有:

count:求数量
max:求最大值
min:求最小值
sum:求和
avg:求平均值
注意:where里不能用这些条件

一、聚合函数举例应用

(1)求员工总人数

select COUNT(*) 数量 from People

(2)求最大值,求最高工资

select MAX(PeopleSalary) 最高工资 from People

(3)求最小时,求最小工资

select MIN(PeopleSalary) 最低工资 from People

(4)求和,求所有员工的工资总和

select SUM(PeopleSalary) 工资总和 from People

(5)求平均值,求所有员工的平均工资

--方案一:
select AVG(PeopleSalary) 平均工资 from People
--方案二:精确到2位小数
select ROUND(AVG(PeopleSalary),2)  平均工资 from People
--方案三:精确到2位小数
select Convert(decimal(12,2),AVG(PeopleSalary))  平均工资 from People

ROUND函数用法:

round(num,len,[type])
其中:
num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取)
select ROUND(123.45454,3)  --123.45500
select ROUND(123.45454,3,1) --123.45400

(6)求数量,最大值,最小值,总和,平均值,在一行显示

select COUNT(*) 数量,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资,SUM(PeopleSalary) 工资总和,AVG(PeopleSalary) 平均工资 from People

(7)查询出武汉地区的员工人数,总工资,最高工资,最低工资和平均工资

select '武汉' 地区,COUNT(*) 数量,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资
,SUM(PeopleSalary) 工资总和,AVG(PeopleSalary) 平均工资 from People 
WHERE PEOPLEADDRESS = '武汉'

(8)求出工资比平均工资高的人员信息

select * from People where PeopleSalary > (select AVG(PeopleSalary) 平均工资 from People)

(9)求数量,年龄最大值,年龄最小值,年龄总和,年龄平均值,在一行显示

--方案一:
select COUNT(*) 数量,
MAX(year(getdate())-year(PeopleBirth)) 最高年龄,
MIN(year(getdate())-year(PeopleBirth)) 最低年龄,
SUM(year(getdate())-year(PeopleBirth)) 年龄总和,
AVG(year(getdate())-year(PeopleBirth)) 平均年龄 
from People
--方案二:
select COUNT(*) 数量,
MAX(DATEDIFF(year, PeopleBirth, getDate())) 最高年龄,
MIN(DATEDIFF(year, PeopleBirth, getDate())) 最低年龄,
SUM(DATEDIFF(year, PeopleBirth, getDate())) 年龄总和,
AVG(DATEDIFF(year, PeopleBirth, getDate())) 平均年龄 
from People

(10)计算出月薪在10000 以上的男性员工的最大年龄,最小年龄和平均年龄

--方案一:
select '男' 性别,COUNT(*) 数量,
MAX(year(getdate())-year(PeopleBirth)) 最高年龄,
MIN(year(getdate())-year(PeopleBirth)) 最低年龄,
SUM(year(getdate())-year(PeopleBirth)) 年龄总和,
AVG(year(getdate())-year(PeopleBirth)) 平均年龄 
from People where PeopleSex = '男' and PeopleSalary >= 10000
--方案二:
select '男' 性别,COUNT(*) 数量,
MAX(DATEDIFF(year, PeopleBirth, getDate())) 最高年龄,
MIN(DATEDIFF(year, PeopleBirth, getDate())) 最低年龄,
SUM(DATEDIFF(year, PeopleBirth, getDate())) 年龄总和,
AVG(DATEDIFF(year, PeopleBirth, getDate())) 平均年龄 
from People where PeopleSex = '男' and PeopleSalary >= 10000

(11)统计出所在地在“武汉或上海”的所有女员工数量以及最大年龄,最小年龄和平均年龄

--方案一:
select '武汉或上海' 地区,'女' 性别,COUNT(*) 数量,
MAX(year(getdate())-year(PeopleBirth)) 最高年龄,
MIN(year(getdate())-year(PeopleBirth)) 最低年龄,
SUM(year(getdate())-year(PeopleBirth)) 年龄总和,
AVG(year(getdate())-year(PeopleBirth)) 平均年龄  
from People where PeopleSex = '女' and PeopleAddress in('武汉','上海')
--方案二:
select '武汉或上海' 地区,'女' 性别,COUNT(*) 数量,
MAX(DATEDIFF(year, PeopleBirth, getDate())) 最高年龄,
MIN(DATEDIFF(year, PeopleBirth, getDate())) 最低年龄,
SUM(DATEDIFF(year, PeopleBirth, getDate())) 年龄总和,
AVG(DATEDIFF(year, PeopleBirth, getDate())) 平均年龄  
from People where PeopleSex = '女' and PeopleAddress in('武汉','上海')

(12)求出年龄比平均年龄高的人员信息

--方案一:
select * from People where 
year(getdate())-year(PeopleBirth) > 
(select AVG(year(getdate())-year(PeopleBirth)) 
from People)
--方案二:
select * from People where 
DATEDIFF(year, PeopleBirth, getDate()) > 
(select AVG(DATEDIFF(year, PeopleBirth, getDate())) 
from People)

二、补充-SQL中常用时间处理函数

getdate() 返回当前的日期和时间

datepart() 返回日期/时间的单独部分

dateadd() 返回日期中添加或减去指定的时间间隔

datediff() 返回两个日期直接的时间

datename() 返回指定日期的指定日期部分的整数

convert() 返回不同格式的时间

示例:

select DATEDIFF(day, '2019-08-20', getDate());    --获取指定时间单位的差值
SELECT DATEADD(MINUTE,-5,GETDATE())               --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR
select DATENAME(month, getDate());                --当前月份
select DATENAME(WEEKDAY, getDate());              --当前星期几
select DATEPART(month, getDate());                --当前月份
select DAY(getDate());                            --返回当前日期天数
select MONTH(getDate());                          --返回当前日期月数
select YEAR(getDate());                           --返回当前日期年数

SELECT CONVERT(VARCHAR(22),GETDATE(),20)          --2020-01-09 14:46:46
SELECT CONVERT(VARCHAR(24),GETDATE(),21)          --2020-01-09 14:46:55.91
SELECT CONVERT(VARCHAR(22),GETDATE(),23)		  --2020-01-09
SELECT CONVERT(VARCHAR(22),GETDATE(),24)          --15:04:07
Select CONVERT(varchar(20),GETDATE(),14)          --15:05:49:330

时间格式控制字符串:

名称日期单位缩写
yearyyyy 或yy
季度quarterqq,q
monthmm,m
一年中第几天dayofyeardy,y
daydd,d
一年中第几周weekwk,ww
星期weekdaydw
小时Hourhh
分钟minutemi,n
secondss,s
毫秒millisecondms
<think>好的,我现在需要回答用户关于SQL Server聚合函数的问题。首先,我要回顾用户之前的问题历史,看看是否有相关的上下文可以借鉴。之前用户询问了DBA的职责,现在转向了具体的SQL Server功能,特别是聚合函数。这可能意味着用户正在学习SQL,或者需要在实际工作中使用这些函数进行数据汇总和分析。 接下来,我需要确定聚合函数的基本定义和常见用途。聚合函数SQL中用于对一组值执行计算,并返回单个值。常见的包括SUM、AVG、COUNT、MAX、MIN等。但用户可能还希望了解更详细的内容,比如每个函数的具体用法、示例、注意事项,以及高级用法如GROUP BY和HAVING子句的使用。 然后,我需要考虑用户可能的层次。用户可能已经对SQL有基本了解,但需要更深入的信息。因此,回答应该结构清晰,分点解释,每个函数都给出定义、语法、示例和注意事项。同时,可能需要提到DBA在处理性能问题时如何优化涉及聚合函数的查询,比如索引的使用。 另外,用户之前的问题涉及DBA的职责,包括性能优化、查询调优等,因此在介绍聚合函数时,可以适当关联这些职责,例如提到在优化查询时需要注意聚合函数对性能的影响,或者如何利用索引提高聚合查询的效率。 还需要检查是否有SQL Server特有的聚合函数或行为,比如STRING_AGG(用于字符串聚合),或者与T-SQL相关的特定功能。此外,窗口函数虽然属于分析函数,但可能在某些情况下与聚合函数结合使用,是否需要简要提及? 需要确保回答准确,语法正确,比如示例中的SQL代码是否使用正确的语法,比如使用大写关键字还是小写,虽然这不是严格必要,但保持一致性更好。同时,注意用户提到的格式要求:行内数学表达式用$...$,但这里可能不需要,因为主要是代码示例。不过需要确认之前的示例中是否有特别处理代码块,可能应该用代码块标记,而不是LaTeX数学格式。 可能还需要提到聚合函数与GROUP BY的关系,以及如何处理NULL值,因为这是常见的问题点。例如,COUNT(*)和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值