每个县里都抽100个户且至少来自3个镇

需求:每县100户,且至少来自3个镇。若是县里没有3个镇,则取所有镇,但只取100条,若是县里所有镇不足100户,则取所有户。

方法1:花了4个小时

分析: 少于3个镇(不含)的县 --6个

少于100户(含)  的县 --2个

总共多少个县        --26个 select count(distinct county_pac),count(distinct town_pac) from tw表 where stat_time=20180826 ;

select county_pac,count(distinct town_pac) 镇个数,count(1) 户个数 from tw表 where stat_time=20180826 group by county_pac order by 2

COUNTY_PAC  镇个数  户个数

1  460204000000 1 535

2 460210000000 1 1030

3 460404000000 1 4

4 460202000000 1 87

5 469033000000 1 350

6 460203000000 2 628

7 460108000000 4 515

8 460106000000 4 473

9 460105000000 5 1506

-----1.先找出县至少有3个镇 ,且每个镇至少有 35户

drop table cs_thz_1;

create table cs_thz_1 as

select * from (   select t.*,row_number() over (partition by county_pac order by residence_id ) rid2 from (     select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac

,row_number() over (partition by town_pac order by dbms_random.value) fam_rid

,count(1) over (partition by town_pac) fam_cnt

,count(distinct town_pac) over (partition by county_pac) town_cnt

from tw表 where stat_time=20180826

) t where town_cnt>=3 and fam_cnt>=35 and fam_rid<=35--大于15户的镇,每个镇取15个 ) where rid2<=100 ;

select count(distinct county_pac),count(1) from cs_thz_1 --已插入20个县,还有6个县需要单独处理

-----2.再找出县=3个镇 ,且至少一个镇< 35户-----这个没有,若有,每个镇先选1个,再随机选97个

-----3.再找出县=2个镇 ------------------------              每个镇先选1个,再随机选98个

-----4.再找出县=1个镇 ------------------------              每个镇先选1个,再随机选99个

select county_pac,count(distinct town_pac) 镇个数,count(1) 户个数 from tw表 t where stat_time=20180826 and not exists( select 1 from cs_thz_1 a where a.county_pac=t.county_pac ) group by county_pac order by 2

--2

insert into cs_thz_1(residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac) select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac from (   select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac          ,row_number() over (partition by town_pac order by dbms_random.value) fam_rid    from tw表 t where stat_time=20180826   and not exists( select 1 from cs_thz_1 a where a.county_pac=t.county_pac ) ) where fam_rid=1;

--3

insert into cs_thz_1(residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac) select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac from (   select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac          ,row_number() over (partition by county_pac order by dbms_random.value) fam_rid    from tw表 t where stat_time=20180826   and exists( select county_pac from cs_thz_1 a where a.county_pac=t.county_pac group by a.county_pac having count(1)<100 and count(distinct town_pac)=2 )   and not exists ( select * from cs_thz_1 a where a.residence_id=t.residence_id ) ) where fam_rid<=98;

--4

insert into cs_thz_1(residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac) select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac from (   select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac          ,row_number() over (partition by county_pac order by dbms_random.value) fam_rid    from tw表 t where stat_time=20180826   and exists( select county_pac from cs_thz_1 a where a.county_pac=t.county_pac group by a.county_pac having count(1)<100 and count(distinct town_pac)=1 )   and not exists ( select * from cs_thz_1 a where a.residence_id=t.residence_id ) ) where fam_rid<=99;

-----5.验证:24个县都能取100条(其中 460203000000只涉及2个镇),1个县取4条(涉及1个镇),1个县取87条(涉及1个镇)--共2491条

select county_pac,count(distinct town_pac) town_cnt,count(1) fam_cnt  from cs_thz_1 group by county_pac order by 3,2 ;

select * from cs_thz_1 order by county_pac,town_pac select count(1) from cs_thz_1;

方法2:在方法1的基础上又花了2个小时

---1.每个县 的每个镇先拿一条,但只插3个镇(每个镇至少有1条,否则不会入tw表),若不足3个镇(应该要2个),也这样弄 ---2.剔除上面的记录,再每个县随机拿(100-已拿条数)条 drop table cs_thz_2; create table cs_thz_2 as with tmp_3_town as (   select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac from (     select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac           ,row_number() over (partition by county_pac order by residence_id) fam_rid2     from (       select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac              ,row_number() over (partition by town_pac order by dbms_random.value) fam_rid        from tw表 where stat_time=20180826     ) where fam_rid=1   ) where fam_rid2<=3 ) select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac from tmp_3_town union all select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac from (   select residence_id,city_name_s,county_name_s,town_name_s,country_name_s,city_pac,county_pac,town_pac,country_pac          ,row_number() over (partition by county_pac order by dbms_random.value) fam_rid          ,b.fam_cnt as yi_cnt   from tw表 a   ,(select county_pac as t_county_pac,count(1) fam_cnt from tmp_3_town group by county_pac ) b   where a.stat_time=20180826 and a.county_pac=b.t_county_pac and not exists(     select * from tmp_3_town t where t.residence_id=a.residence_id   ) ) t1 where t1.fam_rid<=(100-yi_cnt) ;

-----3.验证:24个县都能取100条(其中 460203000000 只涉及2个镇),1个县取4条(涉及1个镇),1个县取87条(涉及1个镇)--共2491条      COUNTY_PAC  镇个数  户个数 1  460204000000 1 535 2 460210000000 1 1030 3 460404000000 1 4 4 460202000000 1 87 5 469033000000 1 350 6 460203000000 2 628 7 460108000000 4 515 8 460106000000 4 473 9 460105000000 5 1506 10 469001000000 7 6846

select county_pac,count(distinct town_pac) town_cnt,count(1) fam_cnt  from cs_thz_2 group by county_pac order by 3,2 ;

select count(distinct county_pac),count(1) from cs_thz_2 ;--26 2424

-----4.结果取数一样 select county_pac,count(distinct town_pac) town_cnt,count(1) fam_cnt  from cs_thz_1 group by county_pac order by 3,2 ;

原文地址:https://www.cnblogs.com/jiangqingfeng/p/9544049.html

时间: 2024-10-16 07:42:37

每个县里都抽100个户且至少来自3个镇的相关文章

模拟test文件下的201712{01..31}/pdf这些文件夹下都有100个pdf文件

1.模拟test文件下的201712{01..31}/pdf这些文件夹下都有100个pdf文件注意灰色部分有反引号[[email protected] ~]# cat b.sh#!/bin/bashcd /root/test && mkdir -p 201712{01..31}/pdfWJ=find /root/moban -type ffor f in find /root/test/201712{01..31}/pdf -type ddocp $WJ $f &>/dev/

北京地区开户转户送好礼

◆开户礼 凡即日起到本营业部新开户的投资者,均可按照相关资金标准享受以下好礼: 市值5000--1万:送2GU盘或精美礼品一份 市值1万--5万:送电热水壶或其他时尚小家电 市值5万--10万:送豆浆机或电高压锅 市值10万--20万:送高档蚕丝被 市值20万--50万:送限量版智能3G"股票手机" 市值50万--100万:送联通一年半3G无线上网卡 市值100万以上:送品牌上网本 ◆开户礼 凡即日起到本营业部开户(或转户)的投资者,均可免费享受以下服务: ①  免费提供手机短信专项服

管理神话之一:得不偿失的100%利用(转)

add by zhj: 人毕竟不是机器,不应该被当机器来使用,太苛刻的老板,手下不可能有优秀的员工 原文:管理神话之一:得不偿失的100%利用 摘要:很多老板或管理总抱着这样的想法“我付他工资了,所以我要让这些技术人员每一天的分分秒秒都被100%利用”,这样想以及正在做的人不在少数,但请停下来,因为你看完这篇文章之后,你就发现这么做往往真的得不偿失. 在最近的一次活动中,有一位经理把我拉到一边,对我说:“Johanna,对于敏捷这东西,我总有些不太明白.显而易见,并不是所有人都被100%利用了.

草根站长如何挣到人生第一个100万

导读:财神的文章总有种醍醐灌顶的感觉,读完本文能在思维上和视野上有所拓展,但我知道文章标题党了,本文你并不能赚到人生的100万,但本文也许会改变你的建站思路. 每 个做网络的人其实都有过想暴富的心态,包括我自己当时想做网络就是因为受到朋友和网上一些大神们的影响.看到别人几千几百万的赚真的是太吸引了.说实话, 大部分人都是因为这样的心态开始做网络的.当然也有一些是因为兴趣爱好,或者想搞点兼职帮补开支的.但是基本90%的站长都做过创富梦. 特 别是我们看多了马云, 史玉柱,李彦宏,马化腾等他们被吹嘘

第十篇 SQL Server代理使用代理帐户

本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这系列的前几篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员.此外,你回顾了SQL Server代理服务

都是“一步之遥”,差距咋就这么大呢?

"一步之遥"这个成语最近很火啊.不过,这"火"有让人高兴的, 也有让人窝火的.近日,姜文携妻美美地亮相柏林电影节,但其向诸多电影和大师致敬的电影<一步之遥>却遭冷遇.据外媒报道,在媒体观映时,竟有约四成观众提前离场,和国内观众观景期间忍不住睡着(包括我在内)有异曲同工"之妙".看来,这无论哪里的观众都分得清,哪些电影是拍给观众看的,哪些电影是导演.专家们自娱自乐的. 与电影<一步之遥>待遇大相径庭的是,2月12日,一幅由中

stoneniqiu 理想就是自己喜欢做,并对社会和他人都有意义的事情!

H5嵌入原生开发小结----兼容安卓与ios的填坑之路 2016-11-19 08:29 by stoneniqiu, 1038 阅读, 8 评论, 收藏, 编辑 一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的坑.主要分UI展示,键盘,输入框等等.解决bug最苦恼的问题不是没有解决方案,而是你没有找到真正的原因.再就是现象难以重现,每次都要发布

18小时内掌握Spark:把云计算大数据速度提高100倍以上

如何把云计算大数据处理速度提高100倍以上?Spark给出了答案. Spark是可以革命Hadoop的目前唯一替代者,能够做Hadoop做的一切事情,同时速度比Hadoop快了100倍以上,下图来自Spark的官方网站: Logistic regression in Hadoop and Spark 可以看出在Spark特别擅长的领域其速度比Hadoop快120倍以上! Spark是基于内存,是云计算领域的继Hadoop之后的下一代的最热门的通用的并行计算框架开源项目,尤其出色的支持Intera

PJSUA2开发文档--第五章 帐户(号)Accounts

第五章 帐户(号) 帐户提供正在使用该应用程序的用户身份.一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址(Address of Record ,AOR),并且用作传出请求中的From头. 帐户可能有也可能没有与之相关联的客户注册.帐户也与路由集和一些认证凭证相关联,这些凭证在使用该帐户发送SIP请求消息时使用.帐户还具有状态,当它们订阅的该帐户存在时,该状态将被报告给远程peer(对等体),或者如果为该帐户启用了存在发布,则该状态被发布到存在服