通过SQL解读财富的分配(二)

简介:    之前分析过一篇《通过SQL解读财富的分配》,当时还不过瘾,其实是我还没看到很多自己期望看到的数据,于是后面又做了一些测试,先测试了一版2000万的数据,得到的结果和100的差别不大,本来想来一个全球70亿人的游戏大联欢,但是确实蛮有挑战。

   之前分析过一篇《通过SQL解读财富的分配》,当时还不过瘾,其实是我还没看到很多自己期望看到的数据,于是后面又做了一些测试,先测试了一版2000万的数据,得到的结果和100的差别不大,本来想来一个全球70亿人的游戏大联欢,但是确实蛮有挑战。

   如果后期还准备玩这个游戏,我就加入更多的数据维度更有意义。

   今天测试的是四个场景,样本基数是1000人,测试100次。

    1)房间里有1000个人,每人都有1元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这1000个人的财富分布是怎样的?

    2)房间里有1000个人,每人都有1元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,如果自己手头没有钱,可以每次透支1元钱,最后这1000个人的财富分布是怎样的?

    3)房间里有1000个人,每人都有1000元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这1000个人的财富分布是怎样的?

   4)房间里有1000个人,每人都有1000元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,如果自己手头没有钱,可以每次透支1元钱,最后这1000个人的财富分布是怎样的?

   猛一看,好像都差不多,其实数据差别大了去了。

1


   第一个是每次1元的本钱,反复100次,不透支。得到的数据如下,可以看到绝大多数的人都是手里空空,或者原地踏步,能够稍有成就的都是少数,能够出类拔萃的那是极少数。


2

第二个场景是,允许你透支,如果手头没钱,每次透支1元,反反复复100次。

第二组数据的差异化很大,输得最多的人输了近99元,赢得最多的人差不多是79,而中间的比例很明显,赢得14元和输了11元的比例相当,占的比重较高。

3

第三组数据,我们玩大一些,每次1元有些太少了。就来本钱是1000元。每一轮回归1000元,重新开始,试验100轮。

这组数据很有意思,至少不会输得精光。而且从测试结果来看肯定该不会,至少能够有900元在手。而运气好的人,运气也好不到哪里去。最多能够赢得75元,即1075元在手。

这个结果和我的初步想法差距很大,如果以中线1000为界,亏的人还是要多一些。


4

第四组数据更激进些,每个人还是1000的本钱,允许透支,每次1元,反反复复100次。

实验了100次,最少的还是900元,但是比例极低,基本的区间还是在999~1001之间。

但是增幅其实很小,不会有大起大落。



如果要测试脚本,其实很简单,就几行SQL改动一下即可。

变更核心逻辑:

--delete from test_money;
--insert into test_money select level,1  from dual connect by level <=1000;
--commit;

begin
for i in 1..1000 loop
update test_money set money=money-1 where pid=i;
update test_money set money=money+1 where pid=trunc(dbms_random.value(0,1000)) ;
end loop;
end;
/
set pages 200
select money,count(*)from test_money group by money order by money;


前端的调度器和信息汇总

for i in {1..100}
do
sqlplus -s / as sysdba<<EOF
@test.sql
EOF
sqlplus -s / as sysdba <<EOF
set pages 200
insert into test_money_sum select money,count(*)from test_money group by money;
select money,sum(money_cnt)/100 from test_money_sum group by money;
EOF
done


目录
相关文章
|
SQL 数据挖掘 Python
SQL4&SQL5 查找所有已经分配部门的员工的last_name和first_name以及dept_no
SQL4&SQL5 查找所有已经分配部门的员工的last_name和first_name以及dept_no
282 0
SQL4&SQL5 查找所有已经分配部门的员工的last_name和first_name以及dept_no
|
SQL Shell Perl
通过SQL解读财富的分配
还是继续昨天的问题,知乎上一个蛮有意思的问题,数据分析师做了一个很有意思的解读。    题目是:房间里有100个人,每人都有100元钱,他们在玩一个游戏。
1212 0
|
SQL 存储 数据库
《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式
原文:《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式 1、文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1、无法直观的看出每个数据文件和日志文件的使用情况。
1321 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
1023 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
714 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
415 6
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
1519 3
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
1510 1