SQL随机数示例分析

分类:编程技术 时间:2024-02-20 16:20 浏览:0 评论:0
0
文章小编给大家详细介绍了《SQL随机数实例分析》。内容详细,步骤清晰,细节处理得当。希望这篇《SQL随机数实例分析》文章能够帮助您解决疑惑。让我们慢慢跟随小编的思路吧。一起深入探讨,学习新知识。

要获取随机数,SQL的编写方式其实有很多种。比如限制数据的范围是7~12,就可以这样写。

mysql> 选择楼层(7 + (RAND() * 6));

+---------------------------- ----------+

|地板(7 + (RAND() * 6)) |

+----------------------------+

| 10 |

+------------- ---------+

集合 1 行

比如限制数据范围在100以内,就可以这样写。

mysql> select truncate(round(rand(),2)*100,0);

+---------------- ------------------+

|截断(round(rand(),2)*100,0) |

+ -------------------------- --------+

| 78 |

+--------------------------------+

当然这只是最基本的实现。 ,没有考虑种子函数的影响。

我们暂且抛开实现的复杂性,结合一些场景来看看不同的实现。我临时编了几个概念,但意思应该是一样的。

平均随机数

这是一种看似随机,但数据分布可控的方式。

例如,如果我生成1到100之间的10个数字,我可以将每10个数字分为1组。每组随机做一个。

这样,我生成了一个从1到10的随机序列。例如,如果第一个随机数是2,我会从20到29中选择一个数字。如果下一个数字是5,那么我将从 50 到 59 中选择一个号码。选择 1 个号码。

这样,数据的分布是可控的,但随机特性得到保证。

一次性随机数

这种随机数就像陕西的炒面,又快又简单,一勺油就可以了。如果我需要 10 个数字,那么我会立即生成 10 个随机数。

实现起来好像有点困难,其实还好,用rand()和limit就可以了。

插入8条数据。

mysql> 插入随机值

(1),(2),(40),(30),(20),(9),(15),(21 );

查询正常,影响8行

记录数:8 重复数:0 警告数:0

默认获取的数据是有序的。

mysql> 从随机中选择*;

+----+

| id |

+----+

| 1 |

| 2 |

| 40 |

| 30 |

| 20 |

| 9 |

| 15 |

| 21 |

+----+

set 8 rows

使用 rand 得到随机序列。

mysql> select *from random order by rand();

+----+

| id |

+ ----+

| 1 |

| 2 |

| 30 |

| 20 |

| 40 |

| 21 |

| 15 |

| 9 |

+----+

set中8行

如果需要拦截,可以使用limit。

mysql> select *from random order by rand() limit 4;

+----+

| id |

+----+

| 30 |

| 21 |

| 9 |

| 20 |

+----+

集合中 4 行

动态随机数

这类随机数成本最高,需要重复计算。反正不确定性别要高得多,但随机性更大。

例如,如果我们从 100 个数字中取出 10 个数字,那么每取出一个数字,我们就需要将其排除并从列表中重新选取。这样的话,如果是连续的数字1 2 3也是可以的。

我们通过SQL简单模拟一下抽奖过程。

初始化表和数据的数量。

create table lucky_money(id int Primary key,money int,statussmallint);

存储过程如下:

分隔符$$

创建过程proc_init()

开始

声明

init_data整数默认1;

当init_data<=1500执行

插入lucky_money值(init_data,0,0);< /p>

set init_data = init_data +1;

end while;

end $$

分隔符;

调用proc_init();

获取到的数据是有序的。那是员工编号。

| 1497 | 1497 0 | 0 |

| 1498 | 1498 0 | 0 |

| 1499 | 1499 0 | 0 |

| 1500 | 1500 0 | 0 |

+------+--------+--------+

集合 1500 行

< p>我们修改状态并随机得到一些数据变化。

更新 lucky_money set Money=1000,status=1 order by rand() 限制 200;

更新 lucky_money set Money=3000,status=1 where status=0 order by rand( ) limit 80;

update lucky_money set Money=5000, status=1 where status=0 order by rand() limit 20;

所以第一轮结束后,平均奖金为360元。

mysql> 从 lucky_money 中选择 avg(money);

+------------+

|平均(钱)|

+----------------+

| 360.0000 |

+------------ --+

1 row in set

读完这篇《SQL随机数实例分析》这篇文章就介绍完了。如果你想掌握这篇文章你还是需要自己去使用来理解其中的知识点。如果您想了解更多相关内容文章,请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > SQL随机数示例分析

用户评论