Cuando trabajas con SQL Server, puede haber momentos en los que necesites generar valores aleatorios. La función RAND en SQL Server te permite generar una secuencia pseudo-aleatoria de números. En este artículo, exploraremos los conceptos básicos de la función RAND y cómo utilizarla de manera efectiva.
Operación básica de la función RAND
La función RAND en SQL Server se puede utilizar con o sin un valor de semilla. Un valor de semilla determina la capacidad de repetir una secuencia de valores de salida. Si especificas un valor de semilla, la función devolverá el mismo valor en cada ejecución sucesiva. Si no especificas un valor de semilla, se asigna un valor de semilla aleatorio en segundo plano para cada invocación de la función.
Aquí tienes un ejemplo de cómo utilizar la función RAND con un valor de semilla:
SELECT RAND(1) AS [rand con semilla de 1]
La salida de esta consulta será la misma en cada ejecución sucesiva porque el valor de semilla es el mismo. Si ejecutas la consulta sin un valor de semilla, así:
SELECT RAND() AS [rand sin semilla]
La salida será diferente en cada ejecución porque se asigna un valor de semilla aleatorio en segundo plano.
Generando una distribución uniforme de dígitos aleatorios
Por defecto, la función RAND devuelve valores con una distribución uniforme. Esto significa que la frecuencia de cada valor pseudo-aleatorio es la misma. Puedes transformar los valores float devueltos por la función RAND en valores discretos, como enteros, para crear una distribución uniforme de dígitos aleatorios.
Aquí tienes un ejemplo de cómo generar una distribución uniforme de dígitos aleatorios:
CREATE TABLE #rand_digits
(
rand_digit TINYINT
)
DECLARE @min_integer TINYINT = 1
DECLARE @max_integer TINYINT = 10
DECLARE @loop_ctr INT = 0
DECLARE @max_loop_ctr INT = 1000
WHILE @loop_ctr < @max_loop_ctr
BEGIN
INSERT INTO #rand_digits (rand_digit)
SELECT FLOOR(RAND() * (@max_integer - @min_integer + 1) + @min_integer)
SET @loop_ctr = @loop_ctr + 1
END
SELECT rand_digit, COUNT(*) AS frequency
FROM #rand_digits
GROUP BY rand_digit
ORDER BY rand_digit
En este ejemplo, creamos una tabla para almacenar los dígitos generados aleatoriamente. Luego, utilizamos un bucle para generar y almacenar un número aleatorio sucesivo. Finalmente, contamos la frecuencia de cada valor de dígito en el conjunto.
Seleccionando una muestra aleatoria de una tabla muy grande
Otro caso de uso para la función RAND es seleccionar una muestra aleatoria de una tabla muy grande. Esto puede ser útil cuando necesitas analizar un subconjunto de datos sin procesar toda la tabla.
Aquí tienes un ejemplo de cómo seleccionar una muestra aleatoria de una tabla muy grande:
CREATE TABLE #sample_of_symbols
(
symbol VARCHAR(50)
)
DECLARE @min_integer INT = 1
DECLARE @max_integer INT = 2614
SELECT symbol
INTO #sample_of_symbols
FROM #symbols_with_all_dates
INNER JOIN
(
SELECT FLOOR(RAND() * (@max_integer - @min_integer + 1) + @min_integer) AS symbol_id
UNION ALL
SELECT FLOOR(RAND() * (@max_integer - @min_integer + 1) + @min_integer)
UNION ALL
SELECT FLOOR(RAND() * (@max_integer - @min_integer + 1) + @min_integer)
-- Agrega más declaraciones UNION ALL para símbolos aleatorios adicionales
) repeatable_symbol_list
ON #symbols_with_all_dates.symbol_id = repeatable_symbol_list.symbol_id
SELECT *
FROM #sample_of_symbols
En este ejemplo, creamos una tabla para almacenar la muestra aleatoria de símbolos. Utilizamos la función RAND para generar IDs de símbolos aleatorios y los unimos con los símbolos de la tabla original. Finalmente, seleccionamos la muestra aleatoria de símbolos.
Al comprender los conceptos básicos de la función RAND y cómo utilizarla de manera efectiva, puedes generar valores aleatorios y seleccionar muestras aleatorias en tus consultas de SQL Server. Ya sea que necesites crear una distribución uniforme de dígitos aleatorios o seleccionar una muestra aleatoria de una tabla grande, la función RAND puede ayudarte a alcanzar tus objetivos.