SQLite | SQLite関数 | sum関数とtotal関数で合計を求める
sum()とtotal()はカラム値の合計を計算します。
sum関数とtotal関数の使い方
sum()で合計を計算します。構文は次のとおりです。
sum(カラム名)
指定カラムの合計を返し、GROUP BYを使うとグループごとに計算します。
total()も合計を計算します。
total(カラム名)
同様にGROUP BYでグループごとの合計を取得できます。
入力がすべて整数ならsum()は整数、total()は常に浮動小数点数を返します。浮動小数点値を含む場合は両方とも浮動小数点数です。
すべてNULLの場合、sum()はNULL、total()は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>
現在はsalesがNULLの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()はNULL、total()は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>
住所ごとの合計が返されます。