SQL Server SUM 合計

SUM 合計

SQL Server の対象データの合計値の求めるときに、SUM関数を使います。

合計値はいろいろなデータ分析で使用されるので良く使う指標だと思います。

構文:SUM ( [ ALL | DISTINCT ] expression )
引数:ALL すべての値に集計関数が適用されます。 ALL が既定値です。
   DISTINCT 値の出現回数にかかわらず、一意な値の合計を返すことを指定します。
   expression 定数、列、関数、および算術演算子、ビット演算子、文字列演算子の組み合わせを指定します。
NULL 値はすべて無視されます。(対象データになりません)

下のSQL例文を載せておきます。

declare @tbl1 table(a_goods varchar(3), b_empNo char(1), c_point int)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','1',800000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','2',600000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','3',400000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','4',300000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','5',500000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','6',600000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','7',2200000)

--ALL
select SUM(ALL c_point) from @tbl1
select SUM(c_point) from @tbl1 --ALLが無くても同じ結果

--DISTINCT
--600000が2行あるため、重複を省き計算される
select SUM(DISTINCT c_point) from @tbl1

--expression
--型変換、桁あふれに対応する
delete from @tbl1
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','1',800000000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','2',600000000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','3',400000000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','4',300000000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','5',500000000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','6',600000000)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','7',1100000000)
select SUM(cast(c_point as bigint)) from @tbl1  --bigint型に
select SUM(cast(c_point as decimal(20,2))) from @tbl1  --decimal型に

もう一例
over や group by 句で括って結果を求める

declare @tbl1 table(a_goods varchar(5), b_empNo char(1), c_point int)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','1',60)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','2',70)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','3',40)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','4',20)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','5',40)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','6',50)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','7',20)

insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','1',70)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','2',60)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','3',50)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','4',80)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','5',30)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','6',60)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','7',40)

insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','1',90)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','2',70)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','3',40)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','4',70)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','5',60)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','6',50)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','7',50)

insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','1',30)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','2',50)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','3',90)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','4',40)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','5',70)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','6',80)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','7',30)

insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','1',80)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','2',60)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','3',40)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','4',30)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','5',50)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','6',60)
insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','7',20)

select SUM(c_point) from @tbl1
select SUM(c_point) from @tbl1 where a_goods='001'
select SUM(c_point) from @tbl1 where a_goods='002'
select SUM(c_point) from @tbl1 where a_goods='003'
select SUM(c_point) from @tbl1 where a_goods='004'
select SUM(c_point) from @tbl1 where a_goods='005'
select a_goods, SUM(c_point) from @tbl1 group by a_goods  --商品ごとの平均点

select distinct b_empNo, SUM(c_point) over (partition by b_empNo) from @tbl1  --社員ごとの平均点 
select b_empNo, SUM(c_point) from @tbl1 group by b_empNo  --社員ごとの平均点

以上、SQL Server で SUM関数を使い合計値を求めるでした。