--- slug: /en/sql-reference/functions/random-functions sidebar_position: 145 sidebar_label: Random Numbers --- # Functions for Generating Random Numbers All functions in this section accept zero or one arguments. The only use of the argument (if provided) is to prevent [common subexpression elimination](../../sql-reference/functions/index.md#common-subexpression-elimination) such that two different executions within a row of the same random function return different random values. Related content - Blog: [Generating random data in ClickHouse](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse) :::note The random numbers are generated by non-cryptographic algorithms. ::: ## rand, rand32 Returns a random UInt32 number, evenly distributed across the range of all possible UInt32 numbers. Uses a linear congruential generator. ## rand64 Returns a random UInt64 number, evenly distributed across the range of all possible UInt64 numbers. Uses a linear congruential generator. ## randCanonical Returns a random Float64 value, evenly distributed in interval [0, 1). ## randConstant Like `rand` but produces a constant column with a random value. **Example** ``` sql SELECT rand(), rand(1), rand(number), randConstant(), randConstant(1), randConstant(number) FROM numbers(3) ``` Result: ``` result ┌─────rand()─┬────rand(1)─┬─rand(number)─┬─randConstant()─┬─randConstant(1)─┬─randConstant(number)─┐ │ 3047369878 │ 4132449925 │ 4044508545 │ 2740811946 │ 4229401477 │ 1924032898 │ │ 2938880146 │ 1267722397 │ 4154983056 │ 2740811946 │ 4229401477 │ 1924032898 │ │ 956619638 │ 4238287282 │ 1104342490 │ 2740811946 │ 4229401477 │ 1924032898 │ └────────────┴────────────┴──────────────┴────────────────┴─────────────────┴──────────────────────┘ ``` ## randUniform Returns a random Float64 drawn uniformly from interval [`min`, `max`) ([continuous uniform distribution](https://en.wikipedia.org/wiki/Continuous_uniform_distribution)). **Syntax** ``` sql randUniform(min, max) ``` **Arguments** - `min` - `Float64` - left boundary of the range, - `max` - `Float64` - right boundary of the range. **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randUniform(5.5, 10) FROM numbers(5) ``` Result: ``` result ┌─randUniform(5.5, 10)─┐ │ 8.094978491443102 │ │ 7.3181248914450885 │ │ 7.177741903868262 │ │ 6.483347380953762 │ │ 6.122286382885112 │ └──────────────────────┘ ``` ## randNormal Returns a random Float64 drawn from a [normal distribution](https://en.wikipedia.org/wiki/Normal_distribution). **Syntax** ``` sql randNormal(mean, variance) ``` **Arguments** - `mean` - `Float64` - mean value of distribution, - `variance` - `Float64` - [variance](https://en.wikipedia.org/wiki/Variance) of the distribution. **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randNormal(10, 2) FROM numbers(5) ``` Result: ``` result ┌──randNormal(10, 2)─┐ │ 13.389228911709653 │ │ 8.622949707401295 │ │ 10.801887062682981 │ │ 4.5220192605895315 │ │ 10.901239123982567 │ └────────────────────┘ ``` ## randLogNormal Returns a random Float64 drawn from a [log-normal distribution](https://en.wikipedia.org/wiki/Log-normal_distribution). **Syntax** ``` sql randLogNormal(mean, variance) ``` **Arguments** - `mean` - `Float64` - mean value of distribution, - `variance` - `Float64` - [variance](https://en.wikipedia.org/wiki/Variance) of the distribution. **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randLogNormal(100, 5) FROM numbers(5) ``` Result: ``` result ┌─randLogNormal(100, 5)─┐ │ 1.295699673937363e48 │ │ 9.719869109186684e39 │ │ 6.110868203189557e42 │ │ 9.912675872925529e39 │ │ 2.3564708490552458e42 │ └───────────────────────┘ ``` ## randBinomial Returns a random UInt64 drawn from a [binomial distribution](https://en.wikipedia.org/wiki/Binomial_distribution). **Syntax** ``` sql randBinomial(experiments, probability) ``` **Arguments** - `experiments` - `UInt64` - number of experiments, - `probability` - `Float64` - probability of success in each experiment, a value between 0 and 1. **Returned value** - Random number. Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md). **Example** ``` sql SELECT randBinomial(100, .75) FROM numbers(5) ``` Result: ``` result ┌─randBinomial(100, 0.75)─┐ │ 74 │ │ 78 │ │ 76 │ │ 77 │ │ 80 │ └─────────────────────────┘ ``` ## randNegativeBinomial Returns a random UInt64 drawn from a [negative binomial distribution](https://en.wikipedia.org/wiki/Negative_binomial_distribution). **Syntax** ``` sql randNegativeBinomial(experiments, probability) ``` **Arguments** - `experiments` - `UInt64` - number of experiments, - `probability` - `Float64` - probability of failure in each experiment, a value between 0 and 1. **Returned value** - Random number. Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md). **Example** ``` sql SELECT randNegativeBinomial(100, .75) FROM numbers(5) ``` Result: ``` result ┌─randNegativeBinomial(100, 0.75)─┐ │ 33 │ │ 32 │ │ 39 │ │ 40 │ │ 50 │ └─────────────────────────────────┘ ``` ## randPoisson Returns a random UInt64 drawn from a [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution). **Syntax** ``` sql randPoisson(n) ``` **Arguments** - `n` - `UInt64` - mean number of occurrences. **Returned value** - Random number. Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md). **Example** ``` sql SELECT randPoisson(10) FROM numbers(5) ``` Result: ``` result ┌─randPoisson(10)─┐ │ 8 │ │ 8 │ │ 7 │ │ 10 │ │ 6 │ └─────────────────┘ ``` ## randBernoulli Returns a random UInt64 drawn from a [Bernoulli distribution](https://en.wikipedia.org/wiki/Bernoulli_distribution). **Syntax** ``` sql randBernoulli(probability) ``` **Arguments** - `probability` - `Float64` - probability of success, a value between 0 and 1. **Returned value** - Random number. Type: [UInt64](/docs/en/sql-reference/data-types/int-uint.md). **Example** ``` sql SELECT randBernoulli(.75) FROM numbers(5) ``` Result: ``` result ┌─randBernoulli(0.75)─┐ │ 1 │ │ 1 │ │ 0 │ │ 1 │ │ 1 │ └─────────────────────┘ ``` ## randExponential Returns a random Float64 drawn from a [exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution). **Syntax** ``` sql randExponential(lambda) ``` **Arguments** - `lambda` - `Float64` - lambda value. **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randExponential(1/10) FROM numbers(5) ``` Result: ``` result ┌─randExponential(divide(1, 10))─┐ │ 44.71628934340778 │ │ 4.211013337903262 │ │ 10.809402553207766 │ │ 15.63959406553284 │ │ 1.8148392319860158 │ └────────────────────────────────┘ ``` ## randChiSquared Returns a random Float64 drawn from a [Chi-square distribution](https://en.wikipedia.org/wiki/Chi-squared_distribution) - a distribution of a sum of the squares of k independent standard normal random variables. **Syntax** ``` sql randChiSquared(degree_of_freedom) ``` **Arguments** - `degree_of_freedom` - `Float64` - degree of freedom. **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randChiSquared(10) FROM numbers(5) ``` Result: ``` result ┌─randChiSquared(10)─┐ │ 10.015463656521543 │ │ 9.621799919882768 │ │ 2.71785015634699 │ │ 11.128188665931908 │ │ 4.902063104425469 │ └────────────────────┘ ``` ## randStudentT Returns a random Float64 drawn from a [Student's t-distribution](https://en.wikipedia.org/wiki/Student%27s_t-distribution). **Syntax** ``` sql randStudentT(degree_of_freedom) ``` **Arguments** - `degree_of_freedom` - `Float64` - degree of freedom. **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randStudentT(10) FROM numbers(5) ``` Result: ``` result ┌─────randStudentT(10)─┐ │ 1.2217309938538725 │ │ 1.7941971681200541 │ │ -0.28192176076784664 │ │ 0.2508897721303792 │ │ -2.7858432909761186 │ └──────────────────────┘ ``` ## randFisherF Returns a random Float64 drawn from a [F-distribution](https://en.wikipedia.org/wiki/F-distribution). **Syntax** ``` sql randFisherF(d1, d2) ``` **Arguments** - `d1` - `Float64` - d1 degree of freedom in `X = (S1 / d1) / (S2 / d2)`, - `d2` - `Float64` - d2 degree of freedom in `X = (S1 / d1) / (S2 / d2)`, **Returned value** - Random number. Type: [Float64](/docs/en/sql-reference/data-types/float.md). **Example** ``` sql SELECT randFisherF(10, 3) FROM numbers(5) ``` Result: ``` result ┌──randFisherF(10, 3)─┐ │ 7.286287504216609 │ │ 0.26590779413050386 │ │ 0.22207610901168987 │ │ 0.7953362728449572 │ │ 0.19278885985221572 │ └─────────────────────┘ ``` ## randomString {#randomString} Generates a string of the specified length filled with random bytes (including zero bytes). Not all characters may be printable. **Syntax** ``` sql randomString(length) ``` **Arguments** - `length` — String length in bytes. Positive integer. **Returned value** - String filled with random bytes. Type: [String](../../sql-reference/data-types/string.md). **Example** Query: ``` sql SELECT randomString(30) AS str, length(str) AS len FROM numbers(2) FORMAT Vertical; ``` Result: ``` text Row 1: ────── str: 3 G : pT ?w тi k aV f6 len: 30 Row 2: ────── str: 9 ,] ^ ) ]?? 8 len: 30 ``` ## randomFixedString Generates a binary string of the specified length filled with random bytes (including zero bytes). Not all characters may be printable. **Syntax** ``` sql randomFixedString(length); ``` **Arguments** - `length` — String length in bytes. [UInt64](../../sql-reference/data-types/int-uint.md). **Returned value(s)** - String filled with random bytes. Type: [FixedString](../../sql-reference/data-types/fixedstring.md). **Example** Query: ```sql SELECT randomFixedString(13) as rnd, toTypeName(rnd) ``` Result: ```text ┌─rnd──────┬─toTypeName(randomFixedString(13))─┐ │ j▒h㋖HɨZ'▒ │ FixedString(13) │ └──────────┴───────────────────────────────────┘ ``` ## randomPrintableASCII Generates a string with a random set of [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) characters. All characters are printable. If you pass `length < 0`, the behavior of the function is undefined. **Syntax** ``` sql randomPrintableASCII(length) ``` **Arguments** - `length` — String length in bytes. Positive integer. **Returned value** - String with a random set of [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) printable characters. Type: [String](../../sql-reference/data-types/string.md) **Example** ``` sql SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3 ``` ``` text ┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐ │ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │ │ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │ │ 2 │ /"+<"wUTh:=LjJ Vm!c&hI*m#XTfzz │ 30 │ └────────┴────────────────────────────────┴──────────────────────────────────┘ ``` ## randomStringUTF8 Generates a random string of a specified length. Result string contains valid UTF-8 code points. The value of code points may be outside of the range of assigned Unicode. **Syntax** ``` sql randomStringUTF8(length); ``` **Arguments** - `length` — Length of the string in code points. [UInt64](../../sql-reference/data-types/int-uint.md). **Returned value(s)** - UTF-8 random string. Type: [String](../../sql-reference/data-types/string.md). **Example** Query: ```sql SELECT randomStringUTF8(13) ``` Result: ```text ┌─randomStringUTF8(13)─┐ │ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛 │ └──────────────────────┘ ``` ## fuzzBits {#fuzzBits} **Syntax** Flips the bits of String or FixedString `s`, each with probability `prob`. **Syntax** ``` sql fuzzBits(s, prob) ``` **Arguments** - `s` - `String` or `FixedString`, - `prob` - constant `Float32/64` between 0.0 and 1.0. **Returned value** Fuzzed string with same type as `s`. **Example** ``` sql SELECT fuzzBits(materialize('abacaba'), 0.1) FROM numbers(3) ``` Result: ``` result ┌─fuzzBits(materialize('abacaba'), 0.1)─┐ │ abaaaja │ │ a*cjab+ │ │ aeca2A │ └───────────────────────────────────────┘ ```