MySQL rand()函数、rand(n)、生成不重复随机数

文章目录

  • 一、rand()与rand(n)
  • 二、rand()使用示例
    • 2.1、rand()与order by/group by使用随机排序分组
    • 2.2、round()与rand()的组合使用
    • 2.3、rand与ceiling的组合使用
    • 2.4、rand与floor组合使用
    • 2.5、rand与md5组合使用
  • 三、总结
    • 3.1、rand()与rand(n)的区别

有时候我们想要生成一个唯一不重复的随机数,mysql提供了rand()函数来实现该功能。

本文首先介绍rand()的基本使用
其次分别介绍round与rand的合用、ceiling与rand的合用、floor与rand的合用、md5与rand的合用

一、rand()与rand(n)

  • rand() 即无参数的,会生成一个[0,1)之间的float型随机数。此时产生的随机数是随机的,不可重复的

  • rand(n),即有参数数,它会使用参数n作为随机数生成的种子。每次使用相同的种子值n,将得到相同的随机排序结果。因此这种随机数是可重复的。这种随机数也是伪随机的‌

rand(n)函数:

  • n是int类型的数字,所以只要是数字就行。不同的种子值生成的随机数是不一样的;对于同一个种子值n,每次返回的随机数是固定的。
  • 同一次查询时,结果集中可能会产生重复随机数。
  • 多次查询时,每次返回的随机数与上一次是一致的。

注意:频繁地在一个很大的数据集上使用RAND()可能会导致性能问题,因为这会导致数据库引擎在每次查询时都生成一个新的随机数。

示例如下:

mysql> select rand(),rand(),rand();
+--------------------+--------------------+-------------------+
| rand()             | rand()             | rand()            |
+--------------------+--------------------+-------------------+
| 0.9601070507989331 | 0.7956807881553478 | 0.098082819113585 |
+--------------------+--------------------+-------------------+
1 row in set (0.00 sec)mysql> select rand(1),rand(1),rand(1);
+---------------------+---------------------+---------------------+
| rand(1)             | rand(1)             | rand(1)             |
+---------------------+---------------------+---------------------+
| 0.40540353712197724 | 0.40540353712197724 | 0.40540353712197724 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)

我们发现:

  • 当直接调用rand()函数时,每次生成的随机数都是不同的。
  • 当直接调用rand(n)函数时,若种子n相同,则生成的随机数是可重复且多次查询是一致的。

上面我们说rand(n)函数,每次使用相同的种子值n,将得到相同的随机排序结果,这是什么意思呢?为了便于理解上面两种示例,我们把rand(),rand(n) 结合表数据一起看一下。

mysql> CREATE TABLE t (i INT);
Query OK, 0 rows affected (0.42 sec)mysql> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
-- 如下:rand()函数查询了两次,每次查询每一行返回的随机数都不相同
mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.61914388706828 |
|    2 | 0.93845168309142 |
|    3 | 0.83482678498591 |
+------+------------------+
3 rows in set (0.00 sec)mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.35877890638893 |
|    2 | 0.28941420772058 |
|    3 | 0.37073435016976 |
+------+------------------+
3 rows in set (0.00 sec)
-- 如下:rand(n)函数查询了两次
-- 同一次查询中可能会返回重复的数字(注意:数据量小的情况不一定有重复值)
-- 但是多次查询时,第二次与第一次返回的结果相同。
mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.90576975597606 |
+------+------------------+
3 rows in set (0.00 sec)mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.90576975597606 |
+------+------------------+
3 rows in set (0.01 sec)

可以发现:

  • rand()函数:每次查询都生成不一样的数据。同一次查询中每行数据的随机数都不一样;多次查询时与上一次生成的随机数也不一致
  • rand(n)函数:同一次查询中数据可能会产生重复(注意:数据量小的情况不一定有重复值);多次查询时与上一次生成的随机数是一致的。 即是指定了随机数的种子,那么多次查询的结果是一样的

二、rand()使用示例

2.1、rand()与order by/group by使用随机排序分组

rand()函数用于随机生成一个不重复的数字,所以当rand()与order by组合使用时,可以实现数据随机排序。
使用场景: 例如可以用于样本抽样,先对数据进行随机排序,然后抽取前x条。

注意因为是随机排序,所以每次返回不同的结果。如果目标是以随机顺序检索行,则可以使用这样的语句。

SELECT * FROM tbl_name ORDER BY RAND();

2.2、round()与rand()的组合使用

round(n,m):对处理的数据进行四舍五入,
n:处理的数据
m:保留的小数位数

实例1.获取某个区间的数据

-- 获取0-100之间的整数
select round(100*rand(),0)

在这里插入图片描述
实例2:获取[40,60)的两位小数

select 40+round(20*rand(),2)
ps:2060-40的差值

在这里插入图片描述

2.3、rand与ceiling的组合使用

ceiling(n):对于数据n向上取整

实例1:select ceiling(1.12)

在这里插入图片描述
实例2:select ceiling(rand());
rand():随机在[0,1)之间,故结果肯定为1

在这里插入图片描述

实例3:随机获取[60,80)之间的整数

select ceiling(60+rand()*20);

在这里插入图片描述

2.4、rand与floor组合使用

floor():是向下取整

实例1:select floor(53.68)
在这里插入图片描述

实例2:select floor(rand());
ps:rand()向下取整必然为0
在这里插入图片描述

实例3:[40,52)之间取整

select floor(40+rand()*12);

在这里插入图片描述

2.5、rand与md5组合使用

md5(n):必须要有参数n,计算n对应的md5摘要,并返回32位的十六进制的字符串
ps:如果n为 NULL,MySQL MD5() 函数返回 NULL

实例1:select md5(123.44);
在这里插入图片描述

实例2:select md5(rand());
在这里插入图片描述

三、总结

3.1、rand()与rand(n)的区别

rand()函数

  • 每次生成是随机数都是不一致且不重复的。
  • 适用场景:样本抽样,对数据随机排序后获取前x条。每次排序的结果都是随机的、不一致的。

rand(n:int)函数

  • n是个int类型的种子参数,每个种子生成的随机数都是不同的。但是相同的种子每次返回的随机数都是固定的。如rand(2)每次返回的值是固定的。
  • 同一次查询时结果集中可能会产生重复的数字。
  • 多次查询时每次返回的随机数与上一次查询结果一致。
  • 适用场景:用于需要重复生成相同随机数序列的场景,例如模拟实验或测试中需要重复执行相同的随机操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2812.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

告别局域网限制!轻松远程访问本地Paperless-ngx文档管理系统远程办公

前言:本文主要介绍如何在Linux系统本地Docker部署Paperless-ngx开源文档管理系统,并结合cpolar内网穿透工具解决本地部署后因为没有公网IP受到局域网访问限制,在异地也能随时远程访问的困扰。 Paperless-ngx是一个开源的文档管理系统&#x…

koa项目实战 == 实现注册登录鉴权

一. 项目的初始化 1 npm 初始化 npm init -y生成package.json文件: 记录项目的依赖 2 git 初始化 git init生成’.git’隐藏文件夹, git 的本地仓库 3 创建 ReadMe 文件 二. 搭建项目 1 安装 Koa 框架 npm install koa2 编写最基本的 app 创建src/main.js const Koa…

中烟创新:以AI审核平台助力烟草行业高效发展

企业对于高效、准确且标准化的文档审核流程需求日益迫切。传统的人工审核方式,不仅耗时费力,而且易受个人主观因素影响,导致审核标准难以统一,影响了工作效率与审核质量。北京中烟创新科技有限公司(简称:“…

SpringBoot框架:作业管理技术新解

4 系统设计 4.1系统概要设计 作业管理系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…

Chrome 插件怎么安装与下载?超详细

原文链接: https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html 前言 国内因为无法访问 Chrome 应用商店的缘故,导致很多优秀的扩展程序无法正常下载与安装。本文将手把手教你如何通过离线安装Chrome 插件,全文图文讲解…

实现图书管理系统

1. 图书管理系统菜单 如上图给用户选项 1. 管理员 2. 普通用户 2. 实现基本框架 右键点src,选择new,选择Package命名三个包 book operation user 1.先选择book包,new两个类 book bookList 在book类中定义书的基本属性,并重写…

黑马官网最新2024前端就业课V8.5笔记---CSS篇(1)

Css 定义 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容) Css 引入方式 内部样式表: CSS 代码写在 style 标签里面 外部样式表: 开发使用 CSS 代码写在单独的 CSS 文件中(.css) 在 HTML 使用 link …

下载pytorch报错:没有发现某个版本

报错如下: 解决: 降级python版本,显卡小于等于 11.3 时,下载pytorch gpu时,python版本选择:3.7即可。

cuda、pytorch-gpu安装踩坑!!!

前提:已经安装了acanoda cuda11.6下载 直接搜索cuda11.6 acanoda操作 python版本3.9 conda create -n pytorch python3.9conda activate pytorch安装Pytorch-gpu版本等包 要使用pip安装,cu116cuda11.6版本 pip install torch1.13.1cu116 torchvi…

音视频入门基础:H.264专题(17)——FFmpeg源码中,获取H.264视频的profile的实现

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

LeetCode --- 421周赛

题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小,可以用暴力枚举移除的数字,得到答案,时间复杂度为O(n^2)&#…

Linux下Java的多种方式安装

Linux下Java的多种方式安装 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言,不仅吸收了…

易灵思fpga pwm生成报错

避免复杂总线 选择正确板子 这个是是全部执行 但是不会自动保存 注意设置 或者使用其他文本显示工具 可能约束会掉 注意复位后没有程序 注意软件不同电脑可能报错 问题未知 尽量简单逻辑

JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用

文章目录 1.总括说明2.httpservlet父类2.1方法介绍2.2dopost方法的演示2.3doput方法的演示 3.HttpServletRequest类3.1方法说明3.2方法使用演示3.3getparameter方法使用3.4使用form表单的方式3.5jackson获取参数 4.HttpResponse类4.1设置状态码4.2自动进行刷新4.3重定向跳转4.3…

矩阵起源 CEO 王龙出席 1024 超互联(苏州)总部节点发布会

10月24日,矩阵起源 CEO & 创始人王龙出席了由中关村超互联新基建产业创新联盟、数字人民币研究院联合主办,世纪互联承办的“超互联(苏州)总部节点发布会”,并分享了矩阵起源及世纪互联在多模态AI数据智能平台与超互…

大数据-202 数据挖掘 机器学习理论 - 决策树 sklearn 绘制决策树 防止过拟合

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

LTE及EPC技术原理(笔记)

无线网络发展历史 20世纪80年代:模拟技术和FDMA 20世纪90年代:数字技术和TDMA 21世纪初:数字技术和CDMA LTE进步 下行100Mbps,上行50Mbps 用户面时延10-20ms,控制面时延小于100ms 带宽从1.4MHz~20MHz&#xff0…

域用户账户与域组账户管理实战

Windows Server 通过建立账户(包括用户账户和组账户)并赋予账户合适的权限,保证使用网络和计算机资源的合法性,以确保数据访问、存储和交换服从安全需要。 如果是单纯的工作组模式的网络,需要使用“计算机管理”工具来管理本地用户和组&#…

C++类与对象(中)

类的默认成员函数 1. 默认成员函数,就是用户没有去显式实现,而编译器会自动生成的成员函数。 2. 对于⼀个类,一般情况下,编译器会默认生成6个默认成员函数。我们主要学习前面4个默认成员函数,对于后面两个默认成员函数…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中,选择Design Settings打开窗口,会有六个选项:DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…