27

If I have the following table:

Table "users"
Column          |       Type       | Modifiers 
---------------+------------------+-----------
  id            | integer          | 
  monthly_usage | real[]           | 

Where monthly_usage is an array of 12 numbers, i.e. {1.2, 1.3, 6.2, 0.9,...}

How can I select the sum of that column?

Something along the lines of:

SELECT id, sum(monthly_usage) as total_usage from users;

Which obviously doesn't work.

Nicolas
  • 2,297
  • 3
  • 28
  • 40

3 Answers3

53
SELECT id, (SELECT SUM(s) FROM UNNEST(monthly_usage) s) as total_usage from users;
Asherah
  • 18,948
  • 5
  • 53
  • 72
Dmitry Seleznev
  • 955
  • 7
  • 7
9

This generalization and reformatting Dmitry's answer helps me understand how it works:

SELECT
  sum(a) AS total
FROM
  (
    SELECT
      unnest(array [1,2,3]) AS a
  ) AS b

Result:

total
 6
jbryanscott
  • 297
  • 4
  • 8
1

In several ways to add up the values ​​of the array, the form I always use is:

WITH X AS(
    SELECT unnest(ARRAY[1, 5, 0, 12, 1, 0, 30, 20, 8, 3, 15, 15, 20, 8]) AS VALOR
)
SELECT SUM(VALOR) FROM X

Result:

138

For more information https://www.postgresql.org/docs/9.1/queries-with.html