SQL Server compute [by]

compute by 子句可通過同一個select語句既查看明細行,又查看彙總行。可計算子組的彙總值,也可計算整個結果集的彙總值。
1、可選的by關鍵字,指定按哪一列分組的基礎上進行聚合。所以如果使用by關鍵字,則之前必須使用order by ,並且分組的列和排序的列一致。如果不帶by關鍵字,則是對整個結果集進行彙總。
2、行聚合函數:count,max,min,sum,avg
3、使用compute [by]子句的select語句將產生2個結果集。
(1)一個爲select 指定的明細行的結果集。
(2)另一個爲compute [by] 指定聚合函數計算的彙總結果集。
 

compute [by]和group by的區別:

1、group by 只有一個結果集。其select的列只能包含分組依據列和聚合函數。

create table Score(
    ScoreID int primary key identity(1,1) not null,
    Sid int foreign key references Student(Sid) not null,
    Pid int foreign key references ProjectTb(Pid) not null,
    Score int
)
insert into dbo.Score(Sid,Pid,Score)
values(1,1,90),(1,2,67),(1,3,84),(2,1,90),(2,2,62),(2,3,87),(3,1,80),(3,2,83),(3,3,89)

select * from dbo.Score

select Sid,sum(Score)
from dbo.Score
group by Sid

 

2、compute [by]產生多個結果集。一類結果集爲每個組的明細行數據(其中必須但不限於聚合表達式參數列,允許但不強制包含分組依據列)。另一類結果集則爲子組的聚合計算結果。

select ScoreID,Pid,Score
from dbo.Score
order by Sid
compute sum(Score) by Sid

此處如果select的字段不包括Score,則會報錯:COMPUTE 子句 #1、聚合表達式 #1 不在選擇列表中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章