假设我有一个包含10.000行(代表10.000个人)和以下列的表:
id qualification gender age income当我选择所有具有特定资质的人(比如“水管工”)时,我得到了100行,具有特定的性别、年龄和收入分布。
我现在想做的是选择某种类型的测试组来检查收入是否受到资质或其他属性分布的影响。
这意味着(现在我来讨论我的问题)我希望获得另一组100行,具有相同的性别和年龄分布(但资格值不同)。当然,这100行应该是随机选择的。
我的主要问题是,当我选择随机行时,我不知道如何编写一个SQL命令来处理分布(当然,在这个上下文中,这些分布可以而且可能应该被视为概率)。
提前谢谢你!
发布于 2011-07-14 09:19:52
您似乎正在尝试解决与this extremely thorny problem紧密相关的问题。
维基页面描述了许多在数据库中检测相关性的方法,包括对以前的pg-hacker讨论(here's another)的引用,各种(被拒绝的)补丁建议,以及讨论该主题的科学论文。
如果这听起来太棘手,我会赞同Catcall的pl/r建议。或另一个可应用的pl。
顺便说一句,你可能会发现pg-kmeans也很有用:
http://pgxn.org/dist/kmeans/doc/kmeans.html
以及PostStat (我自己从未尝试过):
发布于 2011-07-13 19:03:19
在stats.stackexchange.com上可能会更好。
选择随机行很容易,但匹配分布却很难。
您可以编写一个存储过程,
但这看起来很像在海滩上踢死鲸鱼。而且,根据您的数据,它可能永远不会返回。
在花费大量时间尝试在SQL中实现这一点之前,请考虑花一点时间看看使用R等统计软件实现这一点有多难(或有多容易)。
后来的
刚刚发现有一个名为pl/R的包。
PL/R是一种可加载的过程语言,使您能够用R编程语言编写PostgreSQL函数和触发器。PL/R提供了R语言中函数编写器所具有的大部分(如果不是全部)功能。
Google postgresql +statistics +r +pl,获取论文和教程的其他链接。
发布于 2011-07-13 18:50:46
SELECT * from Table1 order by random() limit 100;random()对PostgreSql有效。对于MySql,您可以使用RAND()代替Random()
https://stackoverflow.com/questions/6677603
复制相似问题