SQLite | SQLite Functions | Calculate Column Totals with sum and total

The sum() and total() functions calculate the sum of values in a column.

Using sum and total

Use sum() to calculate a total. The syntax is as follows.

sum(column_name)

It returns the sum of the specified column. With GROUP BY, it returns a total per group.

The total() function also calculates a sum.

total(column_name)

It likewise supports per-group totals with GROUP BY.

sum() returns an integer when all inputs are integers, whereas total() always returns a floating-point value. Both return floating point if any input is floating point.

If all values are NULL, sum() returns NULL, while total() returns 0.0.

–

Create the following table for an example.

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

Insert the following data.

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

The table currently has one row whose sales value is NULL. Calculate the total with both functions.

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> 

With only NULL values, sum() returns NULL and total() returns 0.0.

Add more data.

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> 

Calculate the totals again.

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

Since all values are integers, sum() returns an integer while total() returns floating point.

Add a floating-point value.

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> 

Calculate the totals again.

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

When a floating-point value is present, both functions return floating point.

Finally, group by address and calculate totals for each group.

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> 

A separate total is returned for each address.