SQLite | SQLite関数 | sum関数とtotal関数で合計を求める

sum()total()はカラム値の合計を計算します。

sum関数とtotal関数の使い方

sum()で合計を計算します。構文は次のとおりです。

sum(カラム名)

指定カラムの合計を返し、GROUP BYを使うとグループごとに計算します。

total()も合計を計算します。

total(カラム名)

同様にGROUP BYでグループごとの合計を取得できます。

入力がすべて整数ならsum()は整数、total()は常に浮動小数点数を返します。浮動小数点値を含む場合は両方とも浮動小数点数です。

すべてNULLの場合、sum()NULLtotal()0.0を返します。

例として次のテーブルを作成します。

create table store (address text, sales);
sqlite> create table store (address text, sales);
sqlite> 

次のデータを追加します。

insert into store values ('Seoul', NULL);
sqlite> insert into store values ('Seoul', NULL);
sqlite> 
sqlite> select * from store;
address     sales     
----------  ----------
Seoul                 
sqlite> 

現在はsalesNULLの1行だけです。両関数で合計を求めます。

select sum(sales), total(sales) from store;
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select sum(sales), total(sales) from store;
sum(sales)  total(sales)
----------  ------------
            0.0         
sqlite> 

NULLだけの場合、sum()NULLtotal()0.0です。

データを追加します。

insert into store values ('Busan', 450);
insert into store values ('Daejeon', 380);
insert into store values ('Seoul', 95);
sqlite> insert into store values ('Busan', 450);
sqlite> insert into store values ('Daejeon', 380);
sqlite> insert into store values ('Seoul', 95);
sqlite> 
sqlite> select * from store;
address     sales     
----------  ----------
Seoul                 
Busan       450       
Daejeon     380       
Seoul       95        
sqlite> 

もう一度合計を求めます。

select sum(sales), total(sales) from store;
sqlite> select sum(sales), total(sales) from store;
sum(sales)  total(sales)
----------  ------------
925         925.0       
sqlite> 

すべて整数なのでsum()は整数、total()は浮動小数点数を返します。

浮動小数点値を追加します。

insert into store values ('Busan', 320.45);
sqlite> insert into store values ('Busan', 320.45);
sqlite> 
sqlite> select * from store;
address     sales     
----------  ----------
Seoul                 
Busan       450       
Daejeon     380       
Seoul       95        
Busan       320.45    
sqlite> 

もう一度合計を求めます。

select sum(sales), total(sales) from store;
sqlite> select sum(sales), total(sales) from store;
sum(sales)  total(sales)
----------  ------------
1245.45     1245.45     
sqlite> 

浮動小数点値を含む場合、両関数とも浮動小数点数を返します。

最後にaddressでグループ化し、グループごとの合計を求めます。

select address, sum(sales), total(sales) from store group by address;
sqlite> select address, sum(sales), total(sales) from store group by address;
address     sum(sales)  total(sales)
----------  ----------  ------------
Busan       770.45      770.45      
Daejeon     380         380.0       
Seoul       95          95.0        
sqlite> 

住所ごとの合計が返されます。