PostgreSQL?16?新特性之正態(tài)分布隨機(jī)數(shù)函數(shù)的示例
random() 函數(shù)可以用于生成一個(gè)大于等于 0 小于等于 1 的隨機(jī)數(shù),生成的數(shù)據(jù)遵循平均分布。不過(guò)在實(shí)際環(huán)境中,更多的數(shù)據(jù)則是遵循正態(tài)分布。PostgreSQL 提供了一個(gè)擴(kuò)展模塊 tablefunc,可以用于生成遵循正態(tài)分布的隨機(jī)數(shù);或者我們也可以創(chuàng)建存儲(chǔ)函數(shù)來(lái)模擬正態(tài)分布的隨機(jī)數(shù)。
考慮到它的實(shí)用性,PostgreSQL 16 新增了一個(gè)內(nèi)置的 random_normal() 函數(shù),用于生成這種隨機(jī)數(shù)。我們使用該函數(shù)生成 10 個(gè)隨機(jī)數(shù):
select random_normal() as v from generate_series(1, 10); v | -------------------+ 1.9147182783615317| -1.7265731892046994| -0.9601043210986459| -1.481551351102244| -1.3763031483133177| 0.11872324455736474| 0.9016843380853512| 0.1288806844184827| -1.6392171916791691| 0.33770959079074697|
默認(rèn)參數(shù)調(diào)用時(shí),random_normal() 函數(shù)生成的隨機(jī)數(shù)遵循標(biāo)準(zhǔn)正態(tài)分布(均值為 0,標(biāo)準(zhǔn)差為 1)。
以下示例生成的隨機(jī)數(shù)遵循均值為 1、標(biāo)準(zhǔn)差為 5 的正態(tài)分布:
select random_normal(1, 5) as v from generate_series(1, 10); v | -------------------+ -0.4529440542028027| 5.442251124798599| 6.307851828542196| 4.122825670258253| -2.186242122101672| 4.767936509571358| 5.172144288566877| -3.761475521327373| -2.6431751259304193| 0.19249449162595722|
接下來(lái)我們驗(yàn)證一下該函數(shù)生成的數(shù)據(jù)是否遵循正態(tài)分布。
SELECT round(random_normal(1, 0.5)::numeric, 1) AS v,
count(*),
repeat('#', (count(*) / 100)::integer)
FROM generate_series(1, 100000)
GROUP BY v
ORDER BY v;
v |count|repeat |
----+-----+-------------------------------------------------------------------------------+
-1.2| 1| |
-1.1| 1| |
-1.0| 3| |
-0.9| 9| |
-0.8| 17| |
-0.7| 21| |
-0.6| 55| |
-0.5| 98| |
-0.4| 132|# |
-0.3| 248|## |
-0.2| 521|##### |
-0.1| 728|####### |
0.0| 1090|########## |
0.1| 1586|############### |
0.2| 2203|###################### |
0.3| 2975|############################# |
0.4| 3878|###################################### |
0.5| 4840|################################################ |
0.6| 5778|######################################################### |
0.7| 6670|################################################################## |
0.8| 7299|######################################################################## |
0.9| 7720|############################################################################# |
1.0| 7960|###############################################################################|
1.1| 7794|############################################################################# |
1.2| 7271|######################################################################## |
1.3| 6745|################################################################### |
1.4| 5796|######################################################### |
1.5| 4796|############################################### |
1.6| 3904|####################################### |
1.7| 3034|############################## |
1.8| 2300|####################### |
1.9| 1567|############### |
2.0| 1175|########### |
2.1| 710|####### |
2.2| 454|#### |
2.3| 267|## |
2.4| 164|# |
2.5| 94| |
2.6| 56| |
2.7| 23| |
2.8| 7| |
2.9| 8| |
3.0| 2| |
從上面的圖形可以看出,函數(shù)返回的結(jié)果是一個(gè)正態(tài)分布。我們還可以進(jìn)一步通過(guò)均值和標(biāo)準(zhǔn)差進(jìn)行驗(yàn)證:
WITH RECURSIVE d(n, v) AS ( SELECT 1 AS n, random_normal(1, 0.5) AS v UNION ALL SELECT n+1, random_normal(1, 0.5) FROM d WHERE n<100000 ) SELECT count(*), avg(v), stddev(v) FROM d; count |avg |stddev | ------+------------------+-------------------+ 100000|1.0009116232651825|0.49890904328727353|
到此這篇關(guān)于PostgreSQL 16 新特性之正態(tài)分布隨機(jī)數(shù)函數(shù)的文章就介紹到這了,更多相關(guān)PostgreSQL隨機(jī)數(shù)函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
postgresql數(shù)據(jù)庫(kù)導(dǎo)出和導(dǎo)入及常用的數(shù)據(jù)庫(kù)管理工具
數(shù)據(jù)庫(kù)的導(dǎo)入導(dǎo)出是最常用的功能之一,而PostgreSQL提供的對(duì)應(yīng)工具為pg_dump和pg_restore。pg_dump是用于備份PostgreSQL數(shù)據(jù)庫(kù)的工具,下面這篇文章主要給大家介紹了關(guān)于postgresql數(shù)據(jù)庫(kù)導(dǎo)出和導(dǎo)入及常用的數(shù)據(jù)庫(kù)管理工具使用的相關(guān)資料,需要的朋友可以參考下2023-04-04
Postgresql 賦予用戶(hù)權(quán)限和撤銷(xiāo)權(quán)限的實(shí)例
這篇文章主要介紹了Postgresql 賦予用戶(hù)權(quán)限和撤銷(xiāo)權(quán)限的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
在postgresql數(shù)據(jù)庫(kù)中判斷是否是數(shù)字和日期時(shí)間格式函數(shù)操作
這篇文章主要介紹了在postgresql數(shù)據(jù)庫(kù)中判斷是否是數(shù)字和日期時(shí)間格式函數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Vcenter清理/storage/archive空間的處理方式
通過(guò)SSH登陸到Vcenter并檢查/storage/archive目錄發(fā)現(xiàn)占用過(guò)高,該目錄用于存儲(chǔ)歸檔的日志文件和歷史數(shù)據(jù),解決方案是保留近30天的歸檔文件,這篇文章主要給大家介紹了關(guān)于Vcenter清理/storage/archive空間的處理方式,需要的朋友可以參考下2024-11-11
postgresql 導(dǎo)入數(shù)據(jù)庫(kù)表并重設(shè)自增屬性的操作
這篇文章主要介紹了postgresql 導(dǎo)入數(shù)據(jù)庫(kù)表并重設(shè)自增屬性的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
在PostgreSQL中設(shè)置表中某列值自增或循環(huán)方式
這篇文章主要介紹了在PostgreSQL中設(shè)置表中某列值自增或循環(huán)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
postgresql數(shù)據(jù)添加兩個(gè)字段聯(lián)合唯一的操作
這篇文章主要介紹了postgresql數(shù)據(jù)添加兩個(gè)字段聯(lián)合唯一的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
PostgreSQL怎么創(chuàng)建分區(qū)表詳解
數(shù)據(jù)庫(kù)表分區(qū)把一個(gè)大的物理表分成若干個(gè)小的物理表,并使得這些小物理表在邏輯上可以被當(dāng)成一張表來(lái)使用,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL怎么創(chuàng)建分區(qū)表的相關(guān)資料,需要的朋友可以參考下2022-06-06

