# sum

Calculates the sum of numeric values. `NULL` values do not contribute to the sum.

**Syntax**

```text
sum(num)
```

**Arguments**

* `num` — A numeric column or expression. Integers, floating-point numbers, and
  decimals are supported. Legacy text and blob values use SQL numeric conversion.
  Native dates, times, intervals, addresses, and collections require an explicit
  numeric conversion.

**Returned value**

Returns the sum of the non-`NULL` values, or `NULL` for empty or all-`NULL` input.

* Ordinary integers produce an `INTEGER` result. Exact overflow raises
  `NUMERIC_OVERFLOW`.
* Floating-point inputs produce a `REAL` result.
* Native unsigned and wide integers retain an exact numeric result within their
  supported range.
* Decimals produce an exact decimal total. Mixing decimals with approximate
  inputs raises `TYPE_MISMATCH`; cast the inputs to one numeric family first.

Use `coalesce(sum(num), 0)` when an empty result should be zero. `total(num)`
always produces a floating-point total and returns `0.0` for empty input.

**Examples**

**Computing sum of employee salaries**

```sql
CREATE TABLE employees
(
    id UInt32,
    name String,
    salary UInt32
);

INSERT INTO employees VALUES
    (87432, 'John Smith', 45680),
    (59018, 'Jane Smith', 72350),
    (20376, 'Ivan Ivanovich', 58900),
    (71245, 'Anastasia Ivanovna', 89210);
```

```sql
SELECT sum(salary) FROM employees FORMAT csv;
```

```text
266140
```

**Total time spent on requests**

Store the duration as a numeric number of milliseconds:

```sql
CREATE TABLE requests (req_id UInt32, duration_ms UInt32);
INSERT INTO requests VALUES (1, 100), (2, 200), (3, 300);
```

```sql
SELECT sum(duration_ms) AS total_duration_ms FROM requests FORMAT csv;
```

```text
600
```

**Missing values and empty input**

```sql
INSERT INTO requests VALUES (4, NULL);
```

```sql
SELECT sum(duration_ms) FROM requests FORMAT csv;
```

```text
600
```

```sql
SELECT sum(duration_ms), coalesce(sum(duration_ms), 0)
FROM requests
WHERE req_id > 100
FORMAT csv;
```

```text
\N,0
```
