В статистическом анализе нормальное распределение, также известное как колоколообразная кривая, является распределением вероятностей, которое симметрично и следует определенному закономерному образцу. В SQL Server мы можем сгенерировать нормальное распределение с помощью кода T-SQL. В этой статье мы рассмотрим, как сгенерировать нормальное распределение с определенным средним, стандартным отклонением и точностью.
Создание временной таблицы
Сначала давайте создадим временную таблицу для хранения сгенерированных значений:
IF OBJECT_ID('tempdb..#tblNormalDistribution') IS NOT NULL
DROP TABLE #tblNormalDistribution
CREATE TABLE #tblNormalDistribution (x FLOAT)
Установка переменных
Затем нам нужно объявить и установить переменные для нашего нормального распределения:
DECLARE @pi FLOAT, @2pi FLOAT, @randNum1 FLOAT, @randNum2 FLOAT
DECLARE @value1 FLOAT, @value2 FLOAT
DECLARE @iteration INT, @numberOfIterations INT
DECLARE @mean FLOAT
DECLARE @stdDev FLOAT --стандартное отклонение
DECLARE @precision INT --количество знаков после десятичной точки
SELECT @iteration = 0
SELECT @pi = PI()
SELECT @2pi = 2.0 * @pi
SELECT @mean = 75.0
SELECT @stdDev = 5.0
SELECT @precision = 1
SELECT @numberOfIterations = 500 --Два значения будут сгенерированы на каждой итерации
Генерация нормального распределения
Теперь давайте войдем в цикл для генерации и вставки наших значений с нормальным распределением:
WHILE (@iteration < @numberOfIterations)
BEGIN
SELECT @randNum1 = RAND()
SELECT @randNum2 = RAND()
SELECT @value1 = ROUND((SQRT(-2.0 * LOG(@randNum1)) * COS(@2pi * @randNum2)) * @stdDev, @precision) + @mean
SELECT @value2 = ROUND((SQRT(-2.0 * LOG(@randNum1)) * SIN(@2pi * @randNum2)) * @stdDev, @precision) + @mean
INSERT INTO #tblNormalDistribution (x) VALUES (@value1)
INSERT INTO #tblNormalDistribution (x) VALUES (@value2)
SELECT @iteration = @iteration + 1
END
Проверка нормального распределения
После загрузки данных во временную таблицу мы можем выполнить следующий код T-SQL, чтобы проверить, что наши данные имеют нормальное распределение:
SELECT COUNT(*) AS [Count],
MIN(x) AS [Min],
MAX(x) AS [Max],
AVG(x) AS [Average],
STDEV(x) AS [Standard Deviation]
FROM #tblNormalDistribution
Результат выполнения вышеприведенного запроса покажет количество, минимальное значение, максимальное значение, среднее и стандартное отклонение сгенерированных значений.
Генерация гистограммы
Если мы хотим визуализировать распределение сгенерированных значений, мы можем создать гистограмму с помощью следующего запроса T-SQL:
SELECT ROUND(x, 0) AS testValue,
COUNT(*) AS testValueCount
FROM #tblNormalDistribution
GROUP BY ROUND(x, 0)
ORDER BY testValue
Этот запрос сгруппирует значения в корзины и подсчитает количество значений в каждой корзине. Результат можно использовать для создания гистограммы.
Следуя описанным в этой статье шагам, вы можете сгенерировать нормальное распределение в SQL Server с определенным средним, стандартным отклонением и точностью. Это может быть полезно в различных сценариях статистического анализа.