SQL Server 聚合函数与分组学习(group by)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fjxcsdn/article/details/85523353

一、SQLServer里面的常用的五种聚合函数。

1.Sum(和)-—对于NULL值默认为0

2.MAX(最大值)MIN(最小值)

3.AVG (平均值)—不统计空值,例如存在有四个人,但是只有三个人有成绩,平均成绩为:总和/3

4.COUNT(数量)

--统计所有人分数总和
 select sum(score) from T_table
 
 --统计表中一共有多少条记录
 select count(*) from T_table
 
 --求平均分数
 
 --方式一
 select
 平均分数=(select sum(score)as sumScore from T_table) *1.0/(select count(*) from T_table)
 
 --方式二
 select avg(score*1.0) from T_table
 
 --求分数最高的
 select max(score)from T_table 
 --求分数最低的
 select min(score)from T_table 

--最大日期与最小日期
select max(createTime )as 最大日期,min(createTime)as 最小日期 from T_table

效果展示:

 二、聚合函数使用注意事项

1.聚合函数不统计空值

1.Sum(和)-—对于NULL值默认为0

2.AVG (平均值)—不统计空值(null),例如存在有四个人,但是只有三个人有成绩,平均成绩为:总和/3

--方式一
select
 平均分数=(select sum(score)as sumScore from T_table) *1.0/(select count(*) from T_table)
 
 --方式二
 select avg(score*1.0) from T_table

效果展示:

3.聚合函数如果没有手动的Group By,默认整个表当做成一组,然后对组进行的统计

--统计表中一共有多少条记录
 select count(*) from T_table

 三,分组(group by)

Select 查询的时候,需要的数据进行汇总,这里就用到了groupby 语句,分组一般都和聚合函数连用。下面我们介绍一个分组的小中例子,以及展示效果。

注意:(特别强调)

  1.group by 子句一定放在where 语句之后,与order by 都是对筛选后的数据进行处理,where后面匹配的是条件,通常是用来筛选数据的。

 2.没有出现在group By 子句中的列是不能放在Select语句列名表中(聚合函数除外) 

      当使用了分组语句groupby 语句,或者聚合函数的时候,在select查选列表中,不能包含其他的列名,除非该列在group by 句子中,或者该列包含在某个聚合函数当中。

!!!错误例子:班级号是不可能存在select后面的。

select 
  班级号=class,
  性别=sex,
  人数=count(*)
from T_user
group by sex

例子学习:

--查询每个班号存在所少人
select 
   class as 班号,
   班级人数 =count(*)
from T_user
group by class

--按照性别统计人数
select 
  性别=sex,
  人数=count(*)
from T_user
group by sex

--查询每个班级男同学人数
select
  班级号=class,
  男同学人数=count(*)
from T_user
where sex='男'
group by class

效果展示:

四、Having 与where 的区别

where用来匹配条件,是分组前对每一条数据进行筛选,后面是不可以有聚合函数的,但是可以有任何列进行条件判断筛选。having 是对分组后的每一组数据进行筛选,后面可以有聚合函数的,但是不一定有数据表中的任何列。

     通过上面概述,我们可以将select语句执行顺序分为以下形式:

先 From 表   

ON

JOIN

 where 条件 

Group BY 列   

Having 筛选条件 

SELECT

DISTLNCT

Order By列

TOP

五,向表中插入多条数据(将一个表中的数据备份到另一个新的表中)

     1.例如将下面的T_user表中的数据完完全全的插入到一个不存在的表中,该如何实现呢?

代码:select into 语句不能重复执行,因为每次执行都会创建一个新的表,但是新的数据表不存在旧数据表的约束,只是备份了数据,表的结构没有进行备份

--select * into 要插入的表 from 带有数据的表 
select * into T_person from T_user  

 效果展示:

那么如何只备份表的结构呢?

--只是拷贝了表的结构,但是没有拷贝表的数据
select top 0 * into  T_data from T_user 

2.向一个已经存在数据表插入多条数据:(插入的时候,自增长的数据是不行的哦)

--例如将T_user表中的所有女同学插入到T_data表中
insert into T_data
select  sex, name, class
from T_user 
where sex='女'
 

效果展示

关于聚合函数和分组学习就先分享到这里。如果本篇博客对您有所帮助,记得点赞哦!

猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/85523353