---
title: NRQL math using SELECT
source: https://docs.newrelic.com/docs/nrql/nrql-references/nrql-math-using-select
---

NRQL supports the use of basic and advanced mathematical operators within a `SELECT` clause. You can apply mathematical calculations on both individual attributes and also the results of aggregator functions.

## Use basic math operators with `SELECT` [#basicmath]

To use basic math functions in NRQL, include operators within the `SELECT` clause:

-   Addition: `+`
-   Subtraction: `-`
-   Multiplication: `*`
-   Division: `/`

Here are some examples:

```sql
SELECT duration-databaseDuration FROM Transaction
```

```sql
SELECT count(*)/uniqueCount(session) FROM PageView
```

```sql
SELECT average(duration-databaseDuration) FROM Transaction
```

## Use advanced math operators with `SELECT` [#advancedmath]

NRQL also includes some advanced mathematical functions that can be used for complex calculations. This is helpful if you want to process data to display it more effectively in the UI, or make calculations on queried results in a single step.

### `abs` [#abs]

`abs(n)` returns the absolute value of _n_. For non-negative _n_ it returns _n_, and for negative _n_ it returns the positive number -_n_. For example `abs(2) = 2`, and `abs(-4) = 4`.

### `clamp_max`, `clamp_min` [#clamp]

The clamping functions impose an upper or lower bound on values. For example, `clamp_max(duration, 10)` returns the duration, unless it exceeds 10, in which case 10 is returned. Similarly `clamp_min(duration, 1)` will not return any value lower than 1.

The following example query and chart show the result of clamping both min and max to keep the value in the range 96-98.

```sql
FROM SystemSample 
SELECT average(cpuPercent) AS 'raw',
clamp_min(clamp_max(average(cpuPercent), 98), 96) AS 'clamped'
TIMESERIES
```

![Image of a chart using clamping with both min and max](https://docs.newrelic.com/images/queries-nrql_screenshot-crop_NRQL-math-clamp.webp "Min-max-clamp-chart.png")

Sample graph showing raw data with clamp function applied.

### `exp`[#exp]

Computes the natural exponential function of the argument: `exp(n) = pow(e, n)`.

### Logarithmic functions: `ln`, `log`, `log2`, `log10`  [#log]

These functions compute the logarithm of the argument for various bases.

-   `ln(n)` computes the natural logarithm: the logarithm base e.
-   `log2(n)` computes the logarithm base 2.
-   `log10(n)` computes the logarithm base 10.
-   `log(n, b)` allows logarithms to be computed with an arbitrary base b.
-   All logarithms satisfy the identity: `log(pow(b, n), b) = n`.

Note that `log(0)` is undefined, for all bases. Be aware that if you take the logarithm of something that might be zero, you may end up getting `no value` back from your query.

### `pow`[#pow]

`pow(n, m)` computes _n_ raised to the power _m_. For example, `n * n * ... * n`, with _m_ copies of _n_.

### Rounding functions: `round`, `floor`, `ceil` [#rounding]

These three functions force decimal numbers to one of the neighboring integers.

-   `floor(n)` returns the closest integer less than or equal to _n_.
-   `ceil(n)` (short for "ceiling") returns the closest integer greater than or equal to _n_.
-   `round(n)` returns the closest integer to _n_ in either direction.

![Image of a chart using rounding functions](https://docs.newrelic.com/images/queries-nrql_screenshot-crop_NRQL-math-floor-ceiling.webp "Rounding-functions-chart.png")

Sample graph showing raw data, with floor, round, and ceiling functions applied.

### `sqrt` [#sqrt]

`sqrt(n)` returns the square root of _n_, that is, the number such that `sqrt(n) * sqrt(n) = n`.

## Results with STRING or FLOAT [#strings]

Here is how NRQL handles strings present in math calculations:

Examples:

-   `sum(1+STRING)` = 0
-   `sum(1+MIXED)` = skips records where `MIXED` is a string
-   `average(1+STRING)` = 0
-   `average(1+MIXED)` = skips records where `MIXED` is a string

NULL and zero both appear as 0 in the dashboard. To override NULL values with another numeric value, use the syntax:

```sql
SELECT average(purchasePrice OR 0)
```

This will replace NULL values with 0 or any number specified.

> #### 💡 TIP
>
> You can also use this whether something returns NULL or zero. `(zero) OR 1` returns 0, and `(NULL) OR 1` returns 1.
