首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于总体的SQL抽样

基于总体的SQL抽样
EN

Stack Overflow用户
提问于 2017-01-20 15:41:38
回答 2查看 326关注 0票数 0

我有很多记录.比方说10,000名运动员,按运动分组(下面的数字是可变的):

代码语言:javascript
复制
4,000 are from NBA
2,000 are from NHL
3,000 are from MLB 
1,000 are from NFL

如何构建一个示例查询,该查询将根据总体情况对100条记录进行采样,而不是完全随机,而是提取:

NBA/整个Population=X从MainTable league= 'NBA‘中选择顶级X*(如下所示)

40名来自NBA,20名来自NHL,30名来自MLB,10名来自NFL。

这只是人口的一个样本,这里的逻辑是计算出整个人口的比率,然后把它们应用到样本的大小上。

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-20 23:26:24

考虑对级别顺序使用计数关联子查询,然后将其用作样本比率的筛选标准。

代码语言:javascript
复制
SELECT main.*
FROM 
   (SELECT *,
         (SELECT Count(*) FROM MainTable sub 
          WHERE sub.League = t.League AND sub.UniqueID <= t.UniqueID) As Rank
    FROM MainTable t) AS main

WHERE main.Rank <= CInt((SELECT Count(*) FROM MainTable sub
                         WHERE sub.League = main.League) / 
                         (SELECT Count(*) FROM MainTable) * 100)
ORDER BY main.League, main.Rank

要用嵌套子查询和派生表解释上述查询:

  1. 派生表main是精确的源MainTable,它有一个名为Rank的新列,它给出了每个联赛记录的序数。因此,对于第一次NBA记录(不一定是第一排),它被标记为1级,下一个NBA记录(它可以出现在任何地方,类似于第89排)被标记为2,依此类推。是的,如果需要的话,排名会上升到4,000!
  2. 一旦这个秩场被计算出序数1,2,3,.对于每个联赛组,我们将此SELECT语句定位为FROM子句中的派生表,以便在WHERE筛选器中对样本比率使用秩。我们不能在同一个SELECT调用中计算列和筛选器。
  3. 示例比率是用于计算:(匹配当前行/表记录总数#的联赛记录)的最后两个子查询。然后,将此值乘以每个样本配额100。CInt用于返回可能的十进制比的整数值。还可以考虑使用Round(..., 0)来代替带小数点的圆圈。
票数 0
EN

Stack Overflow用户

发布于 2017-01-20 20:34:13

代码语言:javascript
复制
Dim Leagues(1 To 4) As String

Leagues(1) = "NHL"
Leagues(2) = "MLB"
Leagues(3) = "NFL"
Leagues(4) = "MLS"


Set db = CurrentDb

For x = 1 To 4

y = 0
sqql = "Select * from Maintable Where League = '" & leagues(x) & "'"

Set cf = db.OpenRecordset(sqql)

Set samp = db.OpenRecordset("RANDOMSAMPLE")






Do While y < (x * 1000) ' adjust as necessary just swagged in you wanted 1000 from league 1, 2000 league 2 etc

cf.MoveLast
cf.MoveFirst

i = Int((cf.RecordCount - 1 + 1) * Rnd + 1)

cf.Move (i)

With samp

.AddNew

.fields("Yourfield here") = cf![your field ]

' repeat as nec

.Update

End With
y = y + 1
Loop


cf.Close
Next x

samp.Close
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41767384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档