SQL Server 聚合函式與分組學習(group by)
一、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='女'
效果展示
關於聚合函式和分組學習就先分享到這裡。如果本篇部落格對您有所幫助,記得點贊哦!