Numeric Functions

Mathematical and numeric functions for calculations, rounding, and trigonometry in SDBQL.

Numeric Operations

Basic Math

ABS(number)

Returns the absolute value.

RETURN ABS(-5) --5
CEIL(number)

Rounds up to nearest integer.

RETURN CEIL(4.2) --5
FLOOR(number)

Rounds down to nearest integer.

RETURN FLOOR(4.8) --4
ROUND(num, prec?)

Rounds to specified precision.

RETURN ROUND(3.14159, 2) --3.14
RANDOM()

Returns a random float between 0 and 1.

RETURN RANDOM() --0.54321...
RANDOM_INT(min, max)

Random integer in range (inclusive).

RETURN RANDOM_INT(1, 100) --42
MOD(a, b)

Modulo operation.

RETURN MOD(7, 3) --1
CLAMP(val, min, max)

Clamp value to range.

RETURN CLAMP(15, 0, 10) --10
SIGN(num)

Returns sign of number (-1, 0, 1).

RETURN SIGN(-5) -- -1

Powers & Roots

SQRT(number)

Returns the square root.

RETURN SQRT(16) --4
POW(base, exp)

Returns base raised to exponent.

RETURN POW(2, 3) --8
EXP(x)

Returns e raised to the power of x.

RETURN EXP(1) --2.718...

Logarithms

LOG(x) / LOG10(x) / LOG2(x)

Natural, base-10, and base-2 logarithms.

RETURN LOG10(100) --2

Trigonometry

PI()

Returns the value of PI.

RETURN PI() --3.14159...
SIN(x) / COS(x) / TAN(x)

Trigonometric functions (radians).

RETURN SIN(PI()/2) --1
ASIN(x) / ACOS(x) / ATAN(x)

Inverse trigonometric functions.

RETURN ATAN(1) * 4 -- 3.14159...
DEGREES(x) / DEG(x)

Converts radians to degrees.

RETURN DEGREES(PI()) -- 180
RADIANS(x) / RAD(x)

Converts degrees to radians.

RETURN RADIANS(180) -- 3.14159...

Aggregation Functions

SUM(arr)

Sum of all values in the array.

RETURN SUM([1, 2, 3, 4]) --10
AVG(arr)

Average of all values.

RETURN AVG([1, 2, 3, 4]) --2.5
MIN(arr)

Smallest value in the array.

RETURN MIN([5, 1, 9]) --1
MAX(arr)

Largest value in the array.

RETURN MAX([5, 1, 9]) --9
COUNT(arr)

Number of elements in the array.

RETURN COUNT([1, 2, 3]) --3
COUNT_DISTINCT(arr)

Number of unique elements.

RETURN COUNT_DISTINCT([1, 2, 2, 3]) --3
MEDIAN(arr)

Median value of the array.

RETURN MEDIAN([1, 5, 10]) --5
PERCENTILE(arr, p)

Returns the p-th percentile (0-100).

RETURN PERCENTILE([1..100], 95) --95

Statistical Functions

VARIANCE(arr)

Population variance.

RETURN VARIANCE([1, 2, 3, 4, 5]) --2
VARIANCE_SAMPLE(arr)

Sample variance.

RETURN VARIANCE_SAMPLE([1, 2, 3, 4, 5]) --2.5
STDDEV(arr)

Sample standard deviation.

RETURN STDDEV([1, 2, 3, 4, 5]) --1.581...
STDDEV_POPULATION(arr)

Population standard deviation.

RETURN STDDEV_POPULATION([1, 2, 3, 4, 5]) --1.414...

Practical Examples

-- Calculate user order statistics
FOR u IN users
  LET amounts = (FOR o IN orders FILTER o.user == u._key RETURN o.amount)
  RETURN {
    user: u.name,
    total: SUM(amounts),
    avg: ROUND(AVG(amounts), 2),
    count: COUNT(amounts),
    median: MEDIAN(amounts),
    stddev: ROUND(STDDEV(amounts), 2)
  }

-- Calculate distance between two points
LET x1 = 3, y1 = 4, x2 = 0, y2 = 0
RETURN SQRT(POW(x2 - x1, 2) + POW(y2 - y1, 2))  -- 5

-- Generate random sample
FOR i IN RANGE(1, 10)
  RETURN FLOOR(RANDOM() * 100)  -- Random integers 0-99

-- Calculate compound interest
LET principal = 1000, rate = 0.05, years = 10
RETURN ROUND(principal * POW(1 + rate, years), 2)  -- 1628.89