COUNT カウント
SQL Server の対象データの行数を(アイテム数)求めるときに、COUNT関数もしくはCOUNT_BIG関数を使います。
COUNT は常に int データ型の値を返します。
COUNT_BIG は常に bigint データ型の値を返します。
構文:COUNT ( [ ALL | DISTINCT ] expression | * )
OVER ( [ partition_by_clause ] order_by_clause )
引数:ALL すべての値に集計関数が適用されます。 ALL が既定値です。
DISTINCT COUNT で、NULL でない一意な値の数を返します。
expression text 、image、ntext 以外のあらゆる型の式です。
* すべての行を数えて、テーブル内の行の総数を返すことを指定します。
COUNT(*) はパラメーターはとらず、DISTINCT と一緒には使用できません。
COUNT(*) は重複値を除去しないで、指定されたテーブル内の行数を返します。
各行は 1 行としてカウントされ、 これには NULL 値を保持している行も含まれます。
OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause は、FROM 句で生成された結果セットをパーティションに分割します。
下の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',80) insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','2',60) 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',30) insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','5',50) 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',NULL) insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','8',220) --ALL --NULLはカウントされません select COUNT(ALL c_point) from @tbl1 select COUNT(c_point) from @tbl1 --ALLが無くても同じ結果 --COUNT_BIG select COUNT_BIG(ALL c_point) from @tbl1 --DISTINCT --60が重複しているので1つ減ります select COUNT(DISTINCT c_point) from @tbl1 --* --行がカウントされます select COUNT(*) from @tbl1 --over --a_goods毎にc_pointがカウントされます select distinct a_goods, COUNT(c_point) OVER (PARTITION BY a_goods) from @tbl1
もう一例
AVG や SUM を共に使用して結果を求める
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','2',20) insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','3',40) insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','1',50) insert into @tbl1 (a_goods,b_empNo,c_point) values ('001','2',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','1',80) insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','2',30) insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','1',60) insert into @tbl1 (a_goods,b_empNo,c_point) values ('002','2',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','3',70) insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','3',60) insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','2',50) insert into @tbl1 (a_goods,b_empNo,c_point) values ('003','1',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','2',40) insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','2',10) insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','3',80) insert into @tbl1 (a_goods,b_empNo,c_point) values ('004','3',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','2',30) insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','3',50) insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','1',60) insert into @tbl1 (a_goods,b_empNo,c_point) values ('005','1',20) --商品、社員ごとのデータ select distinct a_goods, b_empNo , COUNT(c_point) over (partition by a_goods,b_empNo) 個数 , SUM(c_point) over (partition by a_goods,b_empNo) 合計 , AVG(c_point) over (partition by a_goods,b_empNo) 平均 from @tbl1 --社員ごとのデータ select distinct b_empNo , COUNT(c_point) over (partition by b_empNo) 個数 , SUM(c_point) over (partition by b_empNo) 合計 , AVG(c_point) over (partition by b_empNo) 平均 from @tbl1 --商品、社員ごとのデータ select a_goods, b_empNo , COUNT(c_point) 個数 , SUM(c_point) 合計 , AVG(c_point) 平均 from @tbl1 group by a_goods, b_empNo order by a_goods, b_empNo --社員ごとのデータ select b_empNo , COUNT(c_point) 個数 , SUM(c_point) 合計 , AVG(c_point) 平均 from @tbl1 group by b_empNo order by b_empNo
以上、SQL Server で COUNT関数を使いアイテム数や行数を求めるでした。