博客 mysql-->随机取数

mysql-->随机取数

   数栈君   发表于 2023-08-10 11:06  164  0

该笔记记录缘由:客户要求分析21年3月每天用户消费的高峰时间点,每天随机取50条数据进行分析,总结出3种随机取数的方法,详情如下

1、方法一

1)使用rand()随机取数,适用于数据量少的情况,若查询表数量大会非常耗时(测试效果建下图一)

-- 写法一
SELECT *
from `结账单`
ORDER BY RAND() LIMIT 50;


-- 写法二(增加一列自增id列,随机取数的效果看起来更直观)
SELECT *
from (
            SELECT (@i:=@i+1) id,
            a1.*
            from `结账单` a1,(SELECT @i:=0) as i
) q
ORDER BY RAND() LIMIT 50;

图一(数据量多少的耗时对比):

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/3dbf067f0e70c4c2651307b1cdc1895f..png
  

图二(方式一查询时间):

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/5d0bcd3fa5e168e15a51524bcfcb2f80..png
  

2、方法二(适用于数据多的情况)

思路:
1)新增某个随机数字段,取大于等于这个随机数的连续取数50条
2)使用round() * rand() 构建一个随机数

-- round(x,d):四舍五入函数;x指要处理的数,d是指保留几位小数
-- round(x),等于round(x,0),该写法默认d为0
-- RAND():函数用于返回范围0 <= V <1.0的随机浮点值V

图三(方式二查询时间):

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/b798bd7868ef3d6aca609913a077ef8d..png
  

SELECT *
FROM `结账单` AS a1
JOIN (
            SELECT ROUND(RAND() * (SELECT MAX(id) FROM `结账单` )) AS id
            ) AS a2
WHERE a1.id >= a2.id
ORDER BY a1.id ASC LIMIT 50;
/*
思路:
1、新增某个随机数字段,取大于等于这个随机数的连续取数50条
2、使用round() * rand() 构建一个随机数
-- round(x,d):四舍五入函数;x指要处理的数,d是指保留几位小数
-- round(x),等于round(x,0),该写法默认d为0
-- RAND()函数:用于返回范围0 <= V <1.0的随机浮点值V
*/



3、方法三

思路:
1)利用id字段随机构建数值,取大于等于这个随机数的连续取数50条
2)使用FLOOR(MAX(id)) * RAND()构建一个随机数

-- FLOOR(x):向下取整,返回小于 x 的最大整数值;例如FLOOR(3.5)取整为3
-- MAX(x):返回指定列最大值;例如:id列(1,5,10)返回10
-- RAND():用于返回范围0 <= V <1.0的随机浮点值V

SELECT *
FROM `结账单`
WHERE id >= (SELECT FLOOR(MAX(id)) * RAND() FROM `结账单`)
ORDER BY id LIMIT 50;
-- FLOOR(x):向下取整,返回小于 x 的最大整数值;例如FLOOR(3.5)取整为3
-- MAX(x):返回指定列最大值;例如:id列(1,5,10)返回10
-- RAND():用于返回范围0 <= V <1.0的随机浮点值V
图四(方式三查询时间):

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/be39933e487b5ee2dee1e86118e524c0..png
  



免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
下一篇:
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群